X-Git-Url: http://sjero.net/git/?p=wget;a=blobdiff_plain;f=src%2Fwarc.c;h=c3a5857203ab490b28b22ec8edffad4293f2f9ce;hp=916b53df2342081131b514935640275ac0cdf2a2;hb=320cfdcb658e8d6556ae9dfd902c2db1db866a6b;hpb=7df4b05f0b2fe910119ef5ea4ce6b6d4c3ec9ff2 diff --git a/src/warc.c b/src/warc.c index 916b53df..c3a58572 100644 --- a/src/warc.c +++ b/src/warc.c @@ -51,10 +51,16 @@ as that of the covered work. */ #ifndef WINDOWS #include +#else +#include #endif #include "warc.h" +#ifndef O_TEMPORARY +#define O_TEMPORARY 0 +#endif + extern char *version_string; /* Set by main in main.c */ @@ -720,10 +726,9 @@ warc_start_new_file (bool meta) if (warc_current_file != NULL) fclose (warc_current_file); - if (warc_current_warcinfo_uuid_str) - free (warc_current_warcinfo_uuid_str); - if (warc_current_filename) - free (warc_current_filename); + + free (warc_current_warcinfo_uuid_str); + free (warc_current_filename); warc_current_file_number++; @@ -732,8 +737,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 @@ -906,8 +917,7 @@ warc_process_cdx_line (char *lineptr, int field_num_original_url, else { free (original_url); - if (checksum_v != NULL) - free (checksum_v); + free (checksum_v); free (record_id); } } @@ -1147,14 +1157,32 @@ warc_tempfile (void) if (path_search (filename, 100, opt.warc_tempdir, "wget", true) == -1) return NULL; - int fd = mkstemp (filename); +#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; +#if !O_TEMPORARY if (unlink (filename) < 0) return NULL; +#endif return fdopen (fd, "wb+"); +#endif /* def __VMS [else] */ } @@ -1387,10 +1415,8 @@ warc_write_response_record (char *url, char *timestamp_str, response_uuid); } - if (block_digest) - free (block_digest); - if (payload_digest) - free (payload_digest); + free (block_digest); + free (payload_digest); return warc_write_ok; }