author | erik <erik> | 2007-02-09 21:12:35 (UTC) |
---|---|---|
committer | erik <erik> | 2007-02-09 21:12:35 (UTC) |
commit | 2695f72652956e94e24611539579e7ff7899811e (patch) (side-by-side diff) | |
tree | 0a2e73775f5b04da5950465f1c31e067256a266c | |
parent | 9abe862308081155837512dd5e6c581752c9ddb2 (diff) | |
download | opie-2695f72652956e94e24611539579e7ff7899811e.zip opie-2695f72652956e94e24611539579e7ff7899811e.tar.gz opie-2695f72652956e94e24611539579e7ff7899811e.tar.bz2 |
This commit fixes an issue where an ioctl call is made but the return
value is not checked. It isn't a big deal. But it would be nice if the
user knew that an ioctl to a device tanked.
-rw-r--r-- | libopie2/opiecore/device/odevice.cpp | 7 | ||||
-rw-r--r-- | libopie2/opiecore/device/odevice_htc.cpp | 4 | ||||
-rw-r--r-- | libopie2/opiecore/device/odevice_zaurus.cpp | 4 |
3 files changed, 12 insertions, 3 deletions
diff --git a/libopie2/opiecore/device/odevice.cpp b/libopie2/opiecore/device/odevice.cpp index e4233eb..aecccca 100644 --- a/libopie2/opiecore/device/odevice.cpp +++ b/libopie2/opiecore/device/odevice.cpp @@ -45,48 +45,49 @@ #include <qapplication.h> #include <qfile.h> #include <qtextstream.h> #include <qwindowsystem_qws.h> /* OPIE */ #include <qpe/config.h> #include <qpe/sound.h> #include <qpe/qcopenvelope_qws.h> #include <qpe/sound.h> #include <opie2/okeyfilter.h> #include <opie2/oresource.h> /* STD */ #include <fcntl.h> #include <math.h> #include <stdlib.h> #include <signal.h> #include <sys/ioctl.h> #include <sys/time.h> #include <unistd.h> #ifndef QT_NO_SOUND #include <linux/soundcard.h> +#include <errno.h> #endif namespace Opie { namespace Core { static const char* PATH_PROC_CPUINFO = "/proc/cpuinfo"; /* STATIC and common implementation */ /* EXPORT */ ODistribution distributions[] = { { System_Familiar, "FamiliarLinux", "/etc/familiar-version" }, { System_OpenZaurus, "OpenZaurus", "/etc/openzaurus-version" }, { System_OpenEmbedded, "OpenEmbedded", "/etc/oe-version" }, { System_Unknown, "Linux", "/etc/issue" }, }; /* EXPORT */ bool isQWS(){ return qApp ? ( qApp->type() == QApplication::GuiServer ) : false; } /* EXPORT */ QCString makeChannel ( const char *str ){ if ( str && !::strchr ( str, '/' )) return QCString ( "QPE/Application/" ) + str; @@ -728,57 +729,61 @@ void ODevice::sendSuspendmsg() */ void ODevice::addPreHandler(QWSServer::KeyboardFilter*aFilter) { Opie::Core::OKeyFilter::inst()->addPreHandler(aFilter); } /** * \brief Remove the QWSServer::KeyboardFilter in the param from the list * * Remove the QWSServer::KeyboardFilter \par aFilter from the List * of Keyfilters. Call this when you delete the KeyFilter! * * @param aFilter The filter to be removed from the Opie::Core::OKeyFilter * @see Opie::Core::ODevice::addPreHandler */ void ODevice::remPreHandler(QWSServer::KeyboardFilter*aFilter) { Opie::Core::OKeyFilter::inst()->remPreHandler(aFilter); } /** * @internal * + * Returns the volume back to the user preference after an alarm is finished. + * * @see changeMixerForAlarm */ void ODevice::playingStopped() { if ( sender() ) const_cast<QObject*>(sender())->disconnect( this ); #ifndef QT_NO_SOUND if ( d->m_sound >= 0 ) { - ::ioctl ( d->m_sound, MIXER_WRITE( d->m_mixer ), &d->m_vol ); + if (::ioctl ( d->m_sound, MIXER_WRITE( d->m_mixer ), &d->m_vol ) == -1) + qWarning( "ODevice::playingStopped() - " + "unable to change volume back (%s)", strerror( errno ) ); ::close ( d->m_sound ); } #endif } /** * \brief Change the Volume for the Alarm and set it back after playing is finished * * If you play an Alarm Sound you might want to change the Mixer to * full volume and ignore the user setting. After it \sa Sound::isFinished * you would turn the volume back to the user preference. * The problem is that we used to enter the event loop while waiting * for the sound to be finished triggering all kind of reentrance * problems what a library shouldn't introduce. * Instead of manually waiting for the sound to be finished use * this Method and it will automatically restore the Mixer to * the user configuration after the sound finished playing. * * Note: The onwership of \param snd is not transfered and playing * is not started in this method. If 'snd' gets deleted before * playing is finished the volume doesn't get set back to * the user preference! * diff --git a/libopie2/opiecore/device/odevice_htc.cpp b/libopie2/opiecore/device/odevice_htc.cpp index 44b33c0..7f82369 100644 --- a/libopie2/opiecore/device/odevice_htc.cpp +++ b/libopie2/opiecore/device/odevice_htc.cpp @@ -285,49 +285,51 @@ void HTC::buzzer( int sound ) case SHARP_BUZ_KEYSOUND: { static Sound key_sound( "keysound" ); snd = &key_sound; } break; case SHARP_BUZ_SCHEDULE_ALARM: default: { static Sound alarm_sound("alarm"); snd = &alarm_sound; } break; } } // If a soundname is defined, we expect that this device has // sound capabilities.. Otherwise we expect to have the buzzer // device.. if ( snd && snd->isFinished() ){ changeMixerForAlarm( 0, "/dev/mixer", snd ); snd->play(); } else if( !snd ) { int fd = ::open ( "/dev/sharp_buz", O_WRONLY|O_NONBLOCK ); if ( fd >= 0 ) { - ::ioctl ( fd, SHARP_BUZZER_MAKESOUND, sound ); + if (::ioctl ( fd, SHARP_BUZZER_MAKESOUND, sound ) == -1) + qWarning( "HTC::buzzer() - Couldn't make the buzzer buzz (%s)", + strerror( errno ) ); ::close ( fd ); } } #endif } void HTC::playAlarmSound() { buzzer( SHARP_BUZ_SCHEDULE_ALARM ); } void HTC::playTouchSound() { buzzer( SHARP_BUZ_TOUCHSOUND ); } void HTC::playKeySound() { buzzer( SHARP_BUZ_KEYSOUND ); } diff --git a/libopie2/opiecore/device/odevice_zaurus.cpp b/libopie2/opiecore/device/odevice_zaurus.cpp index 9d2ebbb..f978355 100644 --- a/libopie2/opiecore/device/odevice_zaurus.cpp +++ b/libopie2/opiecore/device/odevice_zaurus.cpp @@ -359,49 +359,51 @@ void Zaurus::buzzer( int sound ) case SHARP_BUZ_KEYSOUND: { static Sound key_sound( "keysound" ); snd = &key_sound; } break; case SHARP_BUZ_SCHEDULE_ALARM: default: { static Sound alarm_sound("alarm"); snd = &alarm_sound; } break; } } // If a soundname is defined, we expect that this device has // sound capabilities.. Otherwise we expect to have the buzzer // device.. if ( snd && snd->isFinished() ){ changeMixerForAlarm( 0, "/dev/sound/mixer", snd ); snd->play(); } else if( !snd ) { int fd = ::open ( "/dev/sharp_buz", O_WRONLY|O_NONBLOCK ); if ( fd >= 0 ) { - ::ioctl ( fd, SHARP_BUZZER_MAKESOUND, sound ); + if (::ioctl ( fd, SHARP_BUZZER_MAKESOUND, sound ) == -1) + qWarning( "HTC::buzzer() - Couldn't make the buzzer buzz (%s)", + strerror( errno ) ); ::close ( fd ); } } #endif } void Zaurus::playAlarmSound() { buzzer( SHARP_BUZ_SCHEDULE_ALARM ); } void Zaurus::playTouchSound() { buzzer( SHARP_BUZ_TOUCHSOUND ); } void Zaurus::playKeySound() { buzzer( SHARP_BUZ_KEYSOUND ); } |