diff options
author | James Housley <jim@thehousleys.net> | 2007-06-28 11:11:29 +0000 |
---|---|---|
committer | James Housley <jim@thehousleys.net> | 2007-06-28 11:11:29 +0000 |
commit | aed0cc6f2a9a7fdaae08ad6700687f7200b4ebaa (patch) | |
tree | 5ef37d17b276e70f2b924243d6058d4681b8d02a | |
parent | d500c468fc99816a7bdd817404aa489b065ae64d (diff) | |
download | curl-aed0cc6f2a9a7fdaae08ad6700687f7200b4ebaa.tar.gz |
Using fdopen() is a more correct way to implement the CURLOPT_NEW_FILE_PREMS
file.c, but the debug interface was missing. This adds the routines needed
to make the memory debuging work for fdopen().
-rw-r--r-- | lib/file.c | 3 | ||||
-rw-r--r-- | lib/memdebug.c | 10 | ||||
-rw-r--r-- | lib/memdebug.h | 4 | ||||
-rwxr-xr-x | tests/memanalyze.pl | 2 |
4 files changed, 16 insertions, 3 deletions
diff --git a/lib/file.c b/lib/file.c index cec98986b..4cab1f1b9 100644 --- a/lib/file.c +++ b/lib/file.c @@ -231,8 +231,7 @@ static CURLcode file_upload(struct connectdata *conn) failf(data, "Can't open %s for writing", file->path); return CURLE_WRITE_ERROR; } - close(fd); - fp = fopen(file->path, "wb"); + fp = fdopen(fd, "wb"); } if(!fp) { diff --git a/lib/memdebug.c b/lib/memdebug.c index 582387cf9..2eb4c5afb 100644 --- a/lib/memdebug.c +++ b/lib/memdebug.c @@ -280,6 +280,16 @@ FILE *curl_fopen(const char *file, const char *mode, return res; } +FILE *curl_fdopen(int filedes, const char *mode, + int line, const char *source) +{ + FILE *res=(fdopen)(filedes, mode); + if(logfile) + fprintf(logfile, "FILE %s:%d fdopen(\"%d\",\"%s\") = %p\n", + source, line, filedes, mode, res); + return res; +} + int curl_fclose(FILE *file, int line, const char *source) { int res; diff --git a/lib/memdebug.h b/lib/memdebug.h index a4ce7e59a..4e50ad1bb 100644 --- a/lib/memdebug.h +++ b/lib/memdebug.h @@ -67,6 +67,8 @@ CURL_EXTERN int curl_accept(int s, void *addr, void *addrlen, /* FILE functions */ CURL_EXTERN FILE *curl_fopen(const char *file, const char *mode, int line, const char *source); +CURL_EXTERN FILE *curl_fdopen(int filedes, const char *mode, int line, + const char *source); CURL_EXTERN int curl_fclose(FILE *file, int line, const char *source); #ifndef MEMDEBUG_NODEFINES @@ -117,6 +119,8 @@ CURL_EXTERN int curl_fclose(FILE *file, int line, const char *source); #undef fopen #define fopen(file,mode) curl_fopen(file,mode,__LINE__,__FILE__) +#undef fdopen +#define fdopen(file,mode) curl_fdopen(file,mode,__LINE__,__FILE__) #define fclose(file) curl_fclose(file,__LINE__,__FILE__) #endif /* MEMDEBUG_NODEFINES */ diff --git a/tests/memanalyze.pl b/tests/memanalyze.pl index b6bc96714..763f9a3b9 100755 --- a/tests/memanalyze.pl +++ b/tests/memanalyze.pl @@ -237,7 +237,7 @@ while(<FILE>) { $linenum = $2; $function = $3; - if($function =~ /fopen\(\"([^\"]*)\",\"([^\"]*)\"\) = (\(nil\)|0x([0-9a-f]*))/) { + if($function =~ /f[d]*open\(\"([^\"]*)\",\"([^\"]*)\"\) = (\(nil\)|0x([0-9a-f]*))/) { if($3 eq "(nil)") { ; } |