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; }
}