[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Bug-wget] Wget MinGW/MSYS build issues
From: |
Ángel González |
Subject: |
Re: [Bug-wget] Wget MinGW/MSYS build issues |
Date: |
Thu, 14 Mar 2013 01:55:12 +0100 |
User-agent: |
Thunderbird |
On 12/03/13 00:49, Alex wrote:
> Greetings.
> Thanks for quick reply.
> During searching info about FILE_FLAG_DELETE_ON_CLOSE find that flag
> "O_TEMPORARY" work in Windows.
> What if replace mkstemp() with mkostemp()? (
> mkstemp(filename)==mkostemp(filename,0). Need to update bootstrap.conf)
> And use "mkostemp(filename, O_TEMPORARY);" or direct
> "mkostemp(filename,0x0040);"
> unlink(filename) in warc_tempname then isn't needs any more.
> It's work as should in MinGW/Win32 (temporary files exist only during
> usage).
> Can You please check it in *nix?
>
> Best regards, Alex
Oh, cool.
That should work. I saw that mkostemp() was a gnu extension (thus
non-portable), and didn't think in checking if it was available through
gnulib.
I would however do a
#ifndef O_TEMPORARY
#define O_TEMPORARY 0
#endif
(...)
int fd = mkostemp (filename,O_TEMPORARY);
That 0x0040 magic number could have bad effects on some systems.
The unlink() won't be needed for Windows, but will still be needed on
Unix systems.
Modifying your patch a bit, I propose the following (tested on Linux):
diff --git a/bootstrap.conf b/bootstrap.conf
index efb1bc2..516bbb6 100644
--- a/bootstrap.conf
+++ b/bootstrap.conf
@@ -52,6 +52,7 @@ maintainer-makefile
mbtowc
mkdir
mkstemp
+mkostemp
crypto/md5
crypto/sha1
pipe
diff --git a/src/warc.c b/src/warc.c
index fb506a7..7c9fd64 100644
--- a/src/warc.c
+++ b/src/warc.c
@@ -1134,6 +1134,10 @@ warc_close (void)
}
}
+#ifndef O_TEMPORARY
+#define O_TEMPORARY 0
+#endif
+
/* Creates a temporary file for writing WARC output.
The temporary file will be created in opt.warc_tempdir.
Returns the pointer to the temporary file, or NULL. */
@@ -1144,12 +1148,14 @@ warc_tempfile (void)
if (path_search (filename, 100, opt.warc_tempdir, "wget", true) == -1)
return NULL;
- int fd = mkstemp (filename);
+ int fd = mkostemp (filename, O_TEMPORARY);
if (fd < 0)
return NULL;
+#if !O_TEMPORARY
if (unlink (filename) < 0)
return NULL;
+#endif
return fdopen (fd, "wb+");
}