diff -urN -X mp3-unstable/.exclude mp3-0.9.13/player-mp3.c mp3-unstable/player-mp3.c --- mp3-0.9.13/player-mp3.c 2005-07-30 14:33:50.000000000 +0200 +++ mp3-unstable/player-mp3.c 2005-08-01 21:47:25.000000000 +0200 @@ -1391,7 +1391,7 @@ void cOutputOss::Init(void) { if(fd<0) { - fd=open(dspdevice,O_WRONLY); + fd=open(dspdevice,O_WRONLY|O_NONBLOCK); if(fd>=0) poll.Add(fd,true); else esyslog("ERROR: Cannot open dsp device '%s': %s!",dspdevice,strerror(errno)); } @@ -1453,15 +1453,19 @@ int cOutputOss::Output(const unsigned char *Data, int Len, bool SOF) { - int n=0; - if(SOF) { - struct FrameHeader *fh=(struct FrameHeader *)Data; - if(fh->samplerate!=outSr) Reset(fh->samplerate); - n=FHS; - Data+=n; Len-=n; + if(fd>=0) { + int n=0; + if(SOF) { + struct FrameHeader *fh=(struct FrameHeader *)Data; + if(fh->samplerate!=outSr) Reset(fh->samplerate); + n=FHS; + Data+=n; Len-=n; + } + int r=write(fd,Data,Len); + if(r<0 && !FATALERRNO) r=0; + if(r>=0) return n+r; } - int r=fd>=0 ? write(fd,Data,Len) : -1; - return (r>=0 ? r+n : -1); + return -1; } bool cOutputOss::Poll(void)