diff options
author | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2007-12-31 02:48:03 +0000 |
---|---|---|
committer | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2007-12-31 02:48:03 +0000 |
commit | 9e4f4c5e1fba64c1139ebd19927203b357303b16 (patch) | |
tree | 84947fa5612bc820ff77df7947c07f9b47a61f62 /lib/pmfileio.c | |
parent | cca1e4c6e2a1104b7f26e05a8aa9a568f648978c (diff) | |
download | netpbm-mirror-9e4f4c5e1fba64c1139ebd19927203b357303b16.tar.gz netpbm-mirror-9e4f4c5e1fba64c1139ebd19927203b357303b16.tar.xz netpbm-mirror-9e4f4c5e1fba64c1139ebd19927203b357303b16.zip |
Add pm_tmpfile_fd(), pm_make_tmpfile_fd()
git-svn-id: http://svn.code.sf.net/p/netpbm/code/trunk@520 9d0c8265-081b-0410-96cb-a4ca84ce46f8
Diffstat (limited to 'lib/pmfileio.c')
-rw-r--r-- | lib/pmfileio.c | 101 |
1 files changed, 79 insertions, 22 deletions
diff --git a/lib/pmfileio.c b/lib/pmfileio.c index e2cd3d06..12581b8d 100644 --- a/lib/pmfileio.c +++ b/lib/pmfileio.c @@ -192,7 +192,7 @@ mkstemp2(char * const filenameBuffer) { static void makeTmpfileWithTemplate(const char * const filenameTemplate, - FILE ** const filePP, + int * const fdP, const char ** const filenameP, const char ** const errorP) { @@ -214,24 +214,9 @@ makeTmpfileWithTemplate(const char * const filenameTemplate, "pattern '%s'. mkstemp() failed with errno %d (%s)", filenameTemplate, errno, strerror(errno)); else { - int const fd = rc; - - FILE * fileP; - fileP = fdopen(fd, "w+b"); - - if (fileP == NULL) - asprintfN(errorP, "Unable to create temporary file. " - "fdopen() failed with errno %d (%s)", - errno, strerror(errno)); - else { - *errorP = NULL; - *filePP = fileP; - *filenameP = filenameBuffer; - } - if (*errorP) { - unlink(filenameBuffer); - close(fd); - } + *fdP = rc; + *filenameP = filenameBuffer; + *errorP = NULL; } if (*errorP) strfree(filenameBuffer); @@ -240,9 +225,41 @@ makeTmpfileWithTemplate(const char * const filenameTemplate, +static void +fMakeTmpfileWithTemplate(const char * const filenameTemplate, + FILE ** const filePP, + const char ** const filenameP, + const char ** const errorP) { + + int fd; + + makeTmpfileWithTemplate(filenameTemplate, &fd, filenameP, errorP); + + if (!*errorP) { + FILE * fileP; + fileP = fdopen(fd, "w+b"); + + if (fileP == NULL) + asprintfN(errorP, "Unable to create temporary file. " + "fdopen() failed with errno %d (%s)", + errno, strerror(errno)); + else { + *errorP = NULL; + *filePP = fileP; + } + if (*errorP) { + unlink(*filenameP); + strfree(*filenameP); + close(fd); + } + } +} + + + void -pm_make_tmpfile(FILE ** const filePP, - const char ** const filenameP) { +pm_make_tmpfile_fd(int * const fdP, + const char ** const filenameP) { const char * filenameTemplate; unsigned int fnamelen; @@ -266,7 +283,7 @@ pm_make_tmpfile(FILE ** const filePP, asprintfN(&error, "Unable to allocate storage for temporary file name"); else { - makeTmpfileWithTemplate(filenameTemplate, filePP, filenameP, &error); + makeTmpfileWithTemplate(filenameTemplate, fdP, filenameP, &error); strfree(filenameTemplate); } @@ -279,6 +296,29 @@ pm_make_tmpfile(FILE ** const filePP, +void +pm_make_tmpfile(FILE ** const filePP, + const char ** const filenameP) { + + int fd; + + pm_make_tmpfile_fd(&fd, filenameP); + + *filePP = fdopen(fd, "w+b"); + + if (*filePP == NULL) { + close(fd); + unlink(*filenameP); + strfree(*filenameP); + + pm_error("Unable to create temporary file. " + "fdopen() failed with errno %d (%s)", + errno, strerror(errno)); + } +} + + + FILE * pm_tmpfile(void) { @@ -296,6 +336,23 @@ pm_tmpfile(void) { +int +pm_tmpfile_fd(void) { + + int fd; + const char * tmpfile; + + pm_make_tmpfile_fd(&fd, &tmpfile); + + unlink(tmpfile); + + strfree(tmpfile); + + return fd; +} + + + FILE * pm_openr_seekable(const char name[]) { /*---------------------------------------------------------------------------- |