File dtou.c.patch of Package djgpp-dosutils

--- dtou.c.orig	2020-01-10 12:21:18.657192454 +0100
+++ dtou.c	2024-04-27 00:04:13.427952344 +0200
@@ -5,6 +5,11 @@
 /* Copyright (C) 1999 DJ Delorie, see COPYING.DJ for details */
 /* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
 /* Modified by A.Pavenis to work also in different Unix clones */
+
+/* for 32bit applications, we want 64bit */
+#define _LARGEFILE_SOURCE
+#define _FILE_OFFSET_BITS 64
+
 #include <stdio.h>
 #include <fcntl.h>
 #include <sys/stat.h>
@@ -55,11 +60,15 @@ BaseName (char * name)
 static int
 dtou(char *fname, int make_backup, int repair_mode, int strip_mode, int verbose, int vverbose, int preserve_timestamp)
 {
-  int i, k, sf, df, l, l2 = 0, is_CR = 0, is_nCR = 0, is_CR_sequence = 0;
+  int j, sf, df, is_CR = 0, is_nCR = 0, is_CR_sequence = 0;
+  ssize_t i, k, l, l2 = 0;
+  off_t offset, position;
   int CntlZ_flag = 0, CR_flag = 0, nCR_flag = 0, LF_flag = 0, exit_status = NO_ERROR;
-  int buf_counter, nbufs, LF_counter, must_rewind, position, offset, whence;
+  int LF_counter, must_rewind, whence;
+  off_t buf_counter, nbufs;
   char buf[BUF_SIZE];
   char bfname[FILENAME_MAX], tfname[FILENAME_MAX], *bn;
+  char suffix[20];
   struct stat st;
   struct utimbuf tim1;
 
@@ -78,15 +87,16 @@ dtou(char *fname, int make_backup, int r
   strcpy (tfname, fname);
   bn=BaseName(tfname);
   *bn=0;
-  strcat (tfname,"dtou.tm$");
+  sprintf (suffix, "dtou.tm$.%d", getpid());
+  strcat (tfname, suffix);
   if (make_backup)
   {
     strcpy (bfname, fname);
     if (pathconf ((fname), _PC_NAME_MAX) <= 12)
-      for (i = strlen (bfname); i > -1; i--)
-        if (bfname[i] == '.')
+      for (j = (int)strlen (bfname); j > -1; j--)
+        if (bfname[j] == '.')
         {
-          bfname[i] = '\0';
+          bfname[j] = '\0';
           break;
         }
     strcat (bfname,".d2u");
@@ -100,7 +110,8 @@ dtou(char *fname, int make_backup, int r
     return IO_ERROR;
   }
 
-  buf_counter = LF_counter = must_rewind = position = 0;
+  LF_counter = must_rewind = 0;
+  buf_counter = position = 0;
   if (strip_mode)
   {
     offset = 0;
@@ -190,7 +201,7 @@ dtou(char *fname, int make_backup, int r
       must_rewind = 0;
     }
 
-    l2 = (k > 0 ? write (df, buf, k) : 0);
+    l2 = (k > 0 ? write (df, buf, (size_t)k) : 0);
     if (l2 < 0 || CntlZ_flag) break;
     if (l2 != k) { exit_status = IO_ERROR; break; }
   }
openSUSE Build Service is sponsored by