From a92c75880a16cbd4b8e068ca4d301c2862368a16 Mon Sep 17 00:00:00 2001 From: Steve Checkoway Date: Fri, 26 Dec 2008 12:07:29 +0000 Subject: [PATCH] Handle failed and partial writes correctly. --- .../arch/Lights/LightsDriver_LinuxWeedTech.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/stepmania/src/arch/Lights/LightsDriver_LinuxWeedTech.cpp b/stepmania/src/arch/Lights/LightsDriver_LinuxWeedTech.cpp index 4cfa3acbe9..9dfd1f790e 100644 --- a/stepmania/src/arch/Lights/LightsDriver_LinuxWeedTech.cpp +++ b/stepmania/src/arch/Lights/LightsDriver_LinuxWeedTech.cpp @@ -13,19 +13,30 @@ REGISTER_SOUND_DRIVER_CLASS(LinuxWeedTech); // Begin serial driver // static int fd = -1; -static LightsState CurLights; +static LightsState CurLights; static inline void SerialClose() { if( fd != 1 ) close( fd ); + fd = -1; } -static inline void SerialOut(const char *str, int len) +static inline void SerialOut( const char *str, size_t len ) { if( fd ==-1 ) return; - write( fd, str, len ); + while( len ) + { + ssize_t result = write( fd, str, len ); + if( result == -1 ) + { + LOG->Trace( "Failed to write to lights driver: %s", strerror(errno) ); + SerialClose(); + return; + } + len -= result; + } usleep( 2000 ); }