X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fmake-file.c;h=a1a541a5d0fb81c6c8938050ce6c3339f1ab31d5;hb=6d7eed1c12693a3688a3c16f634a5b816660085b;hp=f4456ca153aac03218e94120ecf71f212e6ff689;hpb=d6cbbc8d634fa91f050661355139a4e4697e99ab;p=pspp diff --git a/src/data/make-file.c b/src/data/make-file.c index f4456ca153..a1a541a5d0 100644 --- a/src/data/make-file.c +++ b/src/data/make-file.c @@ -19,7 +19,6 @@ #include "data/make-file.h" #include "libpspp/i18n.h" -#include #include #include #include @@ -148,7 +147,7 @@ Trename (TCHAR const *src, TCHAR const *dst) return -1; } -TCHAR * +TCHAR * convert_to_filename_encoding (const char *s, size_t len, const char *current_encoding) { const char *enc = current_encoding; @@ -160,17 +159,16 @@ convert_to_filename_encoding (const char *s, size_t len, const char *current_enc #else -typedef char TCHAR; #define TS_stat stat #define Trename rename #define Tunlink unlink #define Topen open #define Tstat stat -TCHAR * +TCHAR * convert_to_filename_encoding (const char *s, size_t len UNUSED, const char *current_encoding UNUSED) { - /* Non-windows systems don't care about the encoding. + /* Non-windows systems don't care about the encoding. The string is copied here, to be consistent with the w32 case. */ return xstrdup (s); } @@ -187,11 +185,11 @@ struct replace_file char *tmp_name_verbatim; const char *file_name_verbatim; }; - + static struct ll_list all_files = LL_INITIALIZER (all_files); static void free_replace_file (struct replace_file *); -static void unlink_replace_files (void); +static void unlink_replace_files (int sig); struct replace_file * replace_file_start (const struct file_handle *fh, const char *mode, @@ -215,7 +213,7 @@ replace_file_start (const struct file_handle *fh, const char *mode, fd = Topen (Tfile_name, O_WRONLY); if (fd < 0) { - saved_errno = errno; + saved_errno = errno; msg (ME, _("Opening %s for writing: %s."), file_name, strerror (saved_errno)); free (Tfile_name); @@ -226,7 +224,7 @@ replace_file_start (const struct file_handle *fh, const char *mode, *fp = fdopen (fd, mode); if (*fp == NULL) { - saved_errno = errno; + saved_errno = errno; msg (ME, _("Opening stream for %s: %s."), file_name, strerror (saved_errno)); close (fd); @@ -267,7 +265,10 @@ replace_file_start (const struct file_handle *fh, const char *mode, rf->tmp_name = convert_to_filename_encoding (rf->tmp_name_verbatim, strlen (rf->tmp_name_verbatim), fh_get_file_name_encoding (fh)); /* Create file by that name. */ - fd = Topen (rf->tmp_name, O_WRONLY | O_CREAT | O_EXCL | O_BINARY, permissions); + bool binary = strchr (mode, 'b') != NULL; + fd = Topen (rf->tmp_name, + O_WRONLY | O_CREAT | O_EXCL | (binary ? O_BINARY : O_TEXT), + permissions); if (fd >= 0) break; if (errno != EEXIST) @@ -371,7 +372,7 @@ free_replace_file (struct replace_file *rf) } static void -unlink_replace_files (void) +unlink_replace_files (int sig UNUSED) { struct replace_file *rf;