-rw-r--r-- | libopie2/opiecore/ofilenotify.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/libopie2/opiecore/ofilenotify.cpp b/libopie2/opiecore/ofilenotify.cpp index 270570e..5f2a1cc 100644 --- a/libopie2/opiecore/ofilenotify.cpp +++ b/libopie2/opiecore/ofilenotify.cpp | |||
@@ -74,17 +74,17 @@ int OFileNotification::start( const QString& path, bool sshot, OFileNotification | |||
74 | { | 74 | { |
75 | _path = QString::null; | 75 | _path = QString::null; |
76 | _fd = 0; | 76 | _fd = 0; |
77 | if ( _active ) stop(); | 77 | if ( _active ) stop(); |
78 | QString dirpath; | 78 | QString dirpath; |
79 | 79 | ||
80 | // check if path exists and whether it is a file or a directory, if it exists at all | 80 | // check if path exists and whether it is a file or a directory, if it exists at all |
81 | int result = ::stat( (const char*) path, &_stat ); | 81 | int result = ::stat( (const char*) path, &_stat ); |
82 | if ( result == -1 ) | 82 | if ( !(type & Create) && result == -1 ) |
83 | { | 83 | { |
84 | qWarning( "OFileNotification::start(): Can't stat '%s': %s.", (const char*) path, strerror( errno ) ); | 84 | qWarning( "OFileNotification::start(): Can't stat '%s': %s.", (const char*) path, strerror( errno ) ); |
85 | return -1; | 85 | return -1; |
86 | } | 86 | } |
87 | 87 | ||
88 | // if it is not a directory, we need to find out in which directory the file is | 88 | // if it is not a directory, we need to find out in which directory the file is |
89 | bool isDirectory = S_ISDIR( _stat.st_mode ); | 89 | bool isDirectory = S_ISDIR( _stat.st_mode ); |
90 | if ( !isDirectory ) | 90 | if ( !isDirectory ) |
@@ -197,21 +197,28 @@ bool OFileNotification::activate() | |||
197 | bool OFileNotification::hasChanged() | 197 | bool OFileNotification::hasChanged() |
198 | { | 198 | { |
199 | bool c = false; | 199 | bool c = false; |
200 | 200 | ||
201 | struct stat newstat; | 201 | struct stat newstat; |
202 | ::memset( &newstat, 0, sizeof newstat ); | 202 | ::memset( &newstat, 0, sizeof newstat ); |
203 | int result = ::stat( _path, &newstat ); // may fail if file has been renamed or deleted. that doesn't matter :) | 203 | int result = ::stat( _path, &newstat ); // may fail if file has been renamed or deleted. that doesn't matter :) |
204 | 204 | ||
205 | qDebug( "result of newstat call is %d (%s=%d)", result, strerror( errno ), errno ); | 205 | qDebug( "result of newstat call is %d (%s=%d)", result, result == -1 ? strerror( errno ) : "success", errno ); |
206 | qDebug( "stat.atime = %0lx, newstat.atime = %0lx", (long)_stat.st_atime, (long)newstat.st_atime ); | 206 | qDebug( "stat.atime = %0lx, newstat.atime = %0lx", (long)_stat.st_atime, (long)newstat.st_atime ); |
207 | qDebug( "stat.mtime = %0lx, newstat.mtime = %0lx", (long)_stat.st_mtime, (long)newstat.st_mtime ); | 207 | qDebug( "stat.mtime = %0lx, newstat.mtime = %0lx", (long)_stat.st_mtime, (long)newstat.st_mtime ); |
208 | qDebug( "stat.ctime = %0lx, newstat.ctime = %0lx", (long)_stat.st_ctime, (long)newstat.st_ctime ); | 208 | qDebug( "stat.ctime = %0lx, newstat.ctime = %0lx", (long)_stat.st_ctime, (long)newstat.st_ctime ); |
209 | 209 | ||
210 | if ( !c && (_type & Create) && | ||
211 | (long)_stat.st_atime == 0 && (long)_stat.st_mtime == 0 && (long)_stat.st_ctime == 0 && | ||
212 | (long)newstat.st_atime > 0 && (long)newstat.st_mtime > 0 && (long)newstat.st_ctime > 0) | ||
213 | { | ||
214 | qDebug( "OFileNotification::hasChanged(): file has been created" ); | ||
215 | c = true; | ||
216 | } | ||
210 | if ( !c && (_type & (Delete|Rename)) && (long)newstat.st_atime == 0 && (long)newstat.st_mtime == 0 && (long)newstat.st_ctime == 0) | 217 | if ( !c && (_type & (Delete|Rename)) && (long)newstat.st_atime == 0 && (long)newstat.st_mtime == 0 && (long)newstat.st_ctime == 0) |
211 | { | 218 | { |
212 | qDebug( "OFileNotification::hasChanged(): file has been deleted or renamed" ); | 219 | qDebug( "OFileNotification::hasChanged(): file has been deleted or renamed" ); |
213 | c = true; | 220 | c = true; |
214 | } | 221 | } |
215 | if ( !c && (_type & Access) && (long)_stat.st_atime < (long)newstat.st_atime ) | 222 | if ( !c && (_type & Access) && (long)_stat.st_atime < (long)newstat.st_atime ) |
216 | { | 223 | { |
217 | qDebug( "OFileNotification::hasChanged(): atime changed" ); | 224 | qDebug( "OFileNotification::hasChanged(): atime changed" ); |