]> sjero.net Git - wget/commitdiff
warc: Fix some portability issues on VMS.
authorSteven M. Schweda <sms@antinode.info>
Sat, 13 Jul 2013 10:00:30 +0000 (12:00 +0200)
committerGiuseppe Scrivano <gscrivano@gnu.org>
Sat, 13 Jul 2013 11:36:55 +0000 (13:36 +0200)
src/ChangeLog
src/warc.c

index b80138f2205edce9f3ce717d8e34207112f8a3ea..0990a8dc221fbca96a392748bc8eea830e7e557a 100644 (file)
@@ -1,3 +1,7 @@
+2013-07-13  Steven M. Schweda <sms@antinode.info>
+
+       * warc.c (warc_tempfile): Fix a portability issue on VMS.
+
 2013-07-10  Giuseppe Scrivano  <gscrivano@gnu.org>
 
        * http.c (read_response_body) [ALLOW_CLOBBER]: Move definition to..
index 9202e8d2c331d104442f41ee3ee174e49000948e..41f522af5ecd880b816267f5531f73f3c028f055 100644 (file)
@@ -738,8 +738,14 @@ warc_start_new_file (bool meta)
   char *new_filename = malloc (base_filename_length + 1 + 5 + 8 + 1);
   warc_current_filename = new_filename;
 
+#ifdef __VMS
+# define WARC_GZ "warc-gz"
+#else /* def __VMS */
+# define WARC_GZ "warc.gz"
+#endif /* def __VMS [else] */
+
 #ifdef HAVE_LIBZ
-  const char *extension = (opt.warc_compression_enabled ? "warc.gz" : "warc");
+  const char *extension = (opt.warc_compression_enabled ? WARC_GZ : "warc");
 #else
   const char *extension = "warc";
 #endif
@@ -1153,6 +1159,21 @@ warc_tempfile (void)
   if (path_search (filename, 100, opt.warc_tempdir, "wget", true) == -1)
     return NULL;
 
+#ifdef __VMS
+  /* 2013-07-12 SMS.
+   * mkostemp()+unlink()+fdopen() scheme causes trouble on VMS, so use
+   * mktemp() to uniquify the (VMS-style) name, and then use a normal
+   * fopen() with a "create temp file marked for delete" option.
+   */
+  {
+    char *tfn;
+
+    tfn = mktemp (filename);            /* Get unique name from template. */
+    if (tfn == NULL)
+      return NULL;
+    return fopen (tfn, "w+", "fop=tmd");    /* Create auto-delete temp file. */
+  }
+#else /* def __VMS */
   int fd = mkostemp (filename, O_TEMPORARY);
   if (fd < 0)
     return NULL;
@@ -1162,8 +1183,8 @@ warc_tempfile (void)
     return NULL;
 #endif
 
-
   return fdopen (fd, "wb+");
+#endif /* def __VMS [else] */
 }