-rw-r--r-- | libopie2/opiecore/ofilenotify.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/libopie2/opiecore/ofilenotify.cpp b/libopie2/opiecore/ofilenotify.cpp index 5f2a1cc..b576c4f 100644 --- a/libopie2/opiecore/ofilenotify.cpp +++ b/libopie2/opiecore/ofilenotify.cpp @@ -90,65 +90,65 @@ int OFileNotification::start( const QString& path, bool sshot, OFileNotification if ( !isDirectory ) { int slashpos; slashpos = path.findRev( '/' ); if ( slashpos > 0 ) { _path = path; dirpath = path.left( slashpos ); } } else /* isDirectory */ { qWarning( "FIXME FIXME FIXME = Directory Notification Not Yet Implemented!" ); _path = path; dirpath = path; assert( 0 ); } int fd = ::open( (const char*) dirpath, O_RDONLY ); if ( fd != -1 ) { if ( notification_list.isEmpty() ) { OFileNotification::registerSignalHandler(); } result = ::fcntl( fd, F_SETSIG, SIGRTMIN ); if ( result == -1 ) { qWarning( "OFileNotification::start(): Can't subscribe to '%s': %s.", (const char*) dirpath, strerror( errno ) ); return -1; } - if ( !sshot ) (int) type |= (int) Multi; + if ( !sshot ) type = static_cast<OFileNotificationType>( (int) type | (int) Multi ); result = ::fcntl( fd, F_NOTIFY, type ); if ( result == -1 ) { qWarning( "OFileNotification::start(): Can't subscribe to '%s': %s.", (const char*) dirpath, strerror( errno ) ); return -1; } qDebug( "OFileNotification::start(): Subscribed for changes to %s (fd = %d, mask = 0x%0x)", (const char*) dirpath, fd, type ); notification_list.insert( fd, this ); _type = type; _fd = fd; _active = true; ::memset( &_stat, 0, sizeof _stat ); ::stat( _path, &_stat ); return fd; } else { qWarning( "OFileNotification::start(): Error with path '%s': %s.", (const char*) dirpath, strerror( errno ) ); return -1; } } void OFileNotification::stop() { if ( !_active ) return; int result = ::fcntl( _fd, F_NOTIFY, 0 ); if ( result == -1 ) { qWarning( "OFileNotification::stop(): Can't remove subscription to '%s': %s.", (const char*) _path, strerror( errno ) ); } @@ -270,50 +270,51 @@ void OFileNotification::__signalHandler( int sig, siginfo_t *si, void *data ) } #if 1 if ( !(fn->type() & Multi) ) { qDebug( "OFileNotification::__signalHandler(): '%d' was singleShot. Removing from list.", fd ); notification_list.remove( fd ); if ( notification_list.isEmpty() ) { OFileNotification::unregisterSignalHandler(); } } #endif } else { qWarning( "OFileNotification::__signalHandler(): D'oh! Called without fd in notification_list. Race condition?" ); } } bool OFileNotification::registerSignalHandler() { struct sigaction act; act.sa_sigaction = OFileNotification::__signalHandler; ::sigemptyset( &act.sa_mask ); act.sa_flags = SA_SIGINFO; if ( ::sigaction( SIGRTMIN, &act, NULL ) == -1 ) { qWarning( "OFileNotification::registerSignalHandler(): couldn't register signal handler: %s", strerror( errno ) ); return false; } qDebug( "OFileNotification::registerSignalHandler(): done" ); + return true; } void OFileNotification::unregisterSignalHandler() { struct sigaction act; act.sa_sigaction = ( void (*)(int, siginfo_t*, void*) ) SIG_DFL; ::sigemptyset( &act.sa_mask ); if ( ::sigaction( SIGRTMIN, &act, NULL ) == -1 ) { qWarning( "OFileNotification::unregisterSignalHandler(): couldn't deregister signal handler: %s", strerror( errno ) ); } qDebug( "OFileNotification::unregisterSignalHandler(): done" ); } } } |