bug fixes

master
leitner 23 years ago
parent 24ef5b3bfc
commit 40897bd709

@ -41,11 +41,16 @@ unsigned int scan_double(const char *in, double *dest) {
} }
while (isdigit(*++c)) while (isdigit(*++c))
exp=exp*10+(*c-'0'); exp=exp*10+(*c-'0');
while (exp) { /* XXX: this introduces rounding errors */ if (neg)
d*=10; --exp; while (exp) { /* XXX: this introduces rounding errors */
} d/=10; --exp;
}
else
while (exp) { /* XXX: this introduces rounding errors */
d*=10; --exp;
}
} }
done: done:
*dest=d; *dest=(neg?-d:d);
return c-in; return c-in;
} }

@ -35,15 +35,25 @@ int socket_sendfile(int out,int in,uint32 offset,uint32 bytes) {
int socket_sendfile(int out,int in,uint32 offset,uint32 bytes) { int socket_sendfile(int out,int in,uint32 offset,uint32 bytes) {
char buf[BUFSIZE]; char buf[BUFSIZE];
int n,m; uint32 n,m;
int sent=0; uint32 sent=0;
if (lseek(in,offset,SEEK_SET) == -1) if (lseek(in,offset,SEEK_SET) != offset)
return -1; return -1;
if ((n=read(in,buf,(bytes<BUFSIZE)?bytes:BUFSIZE))<0) while (bytes>0) {
return (sent?sent:-1); char* tmp=buf;
if ((m=write(out,buf,n))<0) uint32 tobedone;
return -1; if ((n=read(in,tmp,(bytes<BUFSIZE)?bytes:BUFSIZE))<=0)
return n; return (sent?sent:-1);
while (n>0) {
if ((m=write(out,tmp,n))<0)
goto abort;
sent+=m;
n-=m;
tmp+=m;
}
}
abort:
return sent;
} }
#endif #endif

Loading…
Cancel
Save