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().
This commit is contained in:
James Housley 2007-06-28 11:11:29 +00:00
Родитель d500c468fc
Коммит aed0cc6f2a
4 изменённых файлов: 16 добавлений и 3 удалений

Просмотреть файл

@ -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) {

Просмотреть файл

@ -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;

Просмотреть файл

@ -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 */

Просмотреть файл

@ -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)") {
;
}