Browse Source

bug fixes

master
Felix von Leitner 19 years ago
parent
commit
0938bbe2aa
2 changed files with 27 additions and 12 deletions
  1. +9
    -4
      scan/scan_double.c
  2. +18
    -8
      socket/socket_sendfile.c

+ 9
- 4
scan/scan_double.c View File

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

+ 18
- 8
socket/socket_sendfile.c View File

@ -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) {
char buf[BUFSIZE];
int n,m;
int sent=0;
if (lseek(in,offset,SEEK_SET) == -1)
uint32 n,m;
uint32 sent=0;
if (lseek(in,offset,SEEK_SET) != offset)
return -1;
if ((n=read(in,buf,(bytes<BUFSIZE)?bytes:BUFSIZE))<0)
return (sent?sent:-1);
if ((m=write(out,buf,n))<0)
return -1;
return n;
while (bytes>0) {
char* tmp=buf;
uint32 tobedone;
if ((n=read(in,tmp,(bytes<BUFSIZE)?bytes:BUFSIZE))<=0)
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


Loading…
Cancel
Save