X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=daemon%2Ffnet-dc.c;h=5123c8075231f48428e2404b1edcc3b55d33f593;hb=3c7f2d14ba774a61baea64c9180b8d70cbe3e020;hp=c7d916deb5ffc6e9eb190543da3d3251c58fe329;hpb=6155e0c76bf55b6848162350ad6696e14838515a;p=doldaconnect.git diff --git a/daemon/fnet-dc.c b/daemon/fnet-dc.c index c7d916d..5123c80 100644 --- a/daemon/fnet-dc.c +++ b/daemon/fnet-dc.c @@ -30,6 +30,7 @@ #include #include #include +#include #ifdef HAVE_CONFIG_H #include @@ -2116,6 +2117,7 @@ static void cmd_adcget(struct socket *sk, struct dcpeer *peer, char *cmd, char * } else if(fd >= 0) { if((wbuf = adc2path(argv[1])) != NULL) transfersetpath(peer->transfer, wbuf); + free(wbuf); peer->transfer->flags.b.minislot = 1; } if(fd < 0) @@ -3320,6 +3322,7 @@ static void updatehmlist(void) char *buf, *buf2, numbuf[32]; size_t bufsize, bufdata; int fd, ibuf; + FILE *out; bufdata = 0; buf = smalloc(bufsize = 65536); @@ -3377,27 +3380,28 @@ static void updatehmlist(void) free(hmlistname); hmlistname = NULL; } else { + out = fdopen(fd, "w"); /* * I do not want to implement a good Huffman encoder, and it's not * like Huffman encoding actually yields any impressive results * for DC file lists anyway, so I'll just output a bogus * tree. Implement a good encoder if you want to. */ - write(fd, "HE3\r\0", 5); - write(fd, &bufdata, 4); + fwrite("HE3\r\0", 1, 5, out); + fwrite(&bufdata, 4, 1, out); /* XXX: Endian unsafe */ ibuf = 256; - write(fd, &ibuf, 2); + fwrite(&ibuf, 2, 1, out); ibuf = 8; for(i = 0; i < 256; i++) { - write(fd, &i, 1); - write(fd, &ibuf, 1); + fwrite(&i, 1, 1, out); + fwrite(&ibuf, 1, 1, out); } for(i = 0; i < 256; i++) - write(fd, &i, 1); + fwrite(&i, 1, 1, out); for(buf2 = buf; bufdata > 0;) { - if((ret = write(fd, buf2, bufdata)) < 0) + if((ret = fwrite(buf2, 1, bufdata, out)) < 0) { flog(LOG_WARNING, "could not write file list: %s", strerror(errno)); break; @@ -3405,7 +3409,7 @@ static void updatehmlist(void) bufdata -= ret; buf2 += ret; } - close(fd); + fclose(out); } free(buf); }