This commit is contained in:
parent
f763b61adf
commit
90463fbe49
143
dos2unix-bnc#488261-dont_destroy_original.patch
Normal file
143
dos2unix-bnc#488261-dont_destroy_original.patch
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
Index: dos2unix.c
|
||||||
|
===================================================================
|
||||||
|
--- dos2unix.c.orig
|
||||||
|
+++ dos2unix.c
|
||||||
|
@@ -69,6 +69,7 @@ static int macmode = 0;
|
||||||
|
#ifdef __MSDOS__
|
||||||
|
# include <dir.h>
|
||||||
|
#endif __MSDOS__
|
||||||
|
+#include <libgen.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
@@ -247,6 +248,39 @@ int ConvertDosToUnix(FILE* ipInF, FILE*
|
||||||
|
return RetVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static int MakeTempFileFrom(const char *OutFN, char **fname_ret)
|
||||||
|
+{
|
||||||
|
+ char *cpy = strdup(OutFN);
|
||||||
|
+ char *dir = NULL;
|
||||||
|
+ size_t fname_len = 0;
|
||||||
|
+ char *fname_str = NULL;
|
||||||
|
+ int fd = -1;
|
||||||
|
+
|
||||||
|
+ *fname_ret = NULL;
|
||||||
|
+
|
||||||
|
+ if (!cpy)
|
||||||
|
+ goto make_failed;
|
||||||
|
+
|
||||||
|
+ dir = dirname(cpy);
|
||||||
|
+
|
||||||
|
+ fname_len = strlen(dir) + strlen("/d2utmpXXXXXX") + sizeof (char);
|
||||||
|
+ if (!(fname_str = malloc(fname_len)))
|
||||||
|
+ goto make_failed;
|
||||||
|
+ sprintf(fname_str, "%s%s", dir, "/d2utmpXXXXXX");
|
||||||
|
+ *fname_ret = fname_str;
|
||||||
|
+
|
||||||
|
+ free(cpy);
|
||||||
|
+
|
||||||
|
+ if ((fd = mkstemp(fname_str)) == -1)
|
||||||
|
+ goto make_failed;
|
||||||
|
+
|
||||||
|
+ return (fd);
|
||||||
|
+
|
||||||
|
+ make_failed:
|
||||||
|
+ free(*fname_ret);
|
||||||
|
+ *fname_ret = NULL;
|
||||||
|
+ return (-1);
|
||||||
|
+}
|
||||||
|
|
||||||
|
/* convert file ipInFN to UNIX format text and write to file ipOutFN
|
||||||
|
* RetVal: 0 if success
|
||||||
|
@@ -257,7 +291,7 @@ int ConvertDosToUnixNewFile(char *ipInFN
|
||||||
|
int RetVal = 0;
|
||||||
|
FILE *InF = NULL;
|
||||||
|
FILE *TempF = NULL;
|
||||||
|
- char TempPath[16];
|
||||||
|
+ char *TempPath;
|
||||||
|
struct stat StatBuf;
|
||||||
|
struct utimbuf UTimeBuf;
|
||||||
|
int fd;
|
||||||
|
@@ -266,8 +300,7 @@ int ConvertDosToUnixNewFile(char *ipInFN
|
||||||
|
if ((ipFlag->KeepDate) && stat(ipInFN, &StatBuf))
|
||||||
|
RetVal = -1;
|
||||||
|
|
||||||
|
- strcpy (TempPath, "./d2utmpXXXXXX");
|
||||||
|
- if((fd=mkstemp (TempPath))<0) {
|
||||||
|
+ if((fd = MakeTempFileFrom(ipOutFN, &TempPath))<0) {
|
||||||
|
perror("Failed to open output temp file");
|
||||||
|
RetVal = -1;
|
||||||
|
}
|
||||||
|
@@ -284,6 +317,7 @@ int ConvertDosToUnixNewFile(char *ipInFN
|
||||||
|
if ((!RetVal) && (InF) && ((TempF=OpenOutFile(fd)) == NULL))
|
||||||
|
{
|
||||||
|
fclose (InF);
|
||||||
|
+ InF = NULL;
|
||||||
|
RetVal = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -317,9 +351,6 @@ int ConvertDosToUnixNewFile(char *ipInFN
|
||||||
|
/* can rename temp file to out file? */
|
||||||
|
if (!RetVal)
|
||||||
|
{
|
||||||
|
- if (stat(ipOutFN, &StatBuf) == 0)
|
||||||
|
- unlink(ipOutFN);
|
||||||
|
-
|
||||||
|
if ((rename(TempPath, ipOutFN) == -1) && (!ipFlag->Quiet))
|
||||||
|
{
|
||||||
|
fprintf(stderr, "dos2unix: problems renaming '%s' to '%s'\n", TempPath, ipOutFN);
|
||||||
|
@@ -327,6 +358,7 @@ int ConvertDosToUnixNewFile(char *ipInFN
|
||||||
|
RetVal = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+ free(TempPath);
|
||||||
|
return RetVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -342,7 +374,7 @@ int ConvertDosToUnixOldFile(char* ipInFN
|
||||||
|
int RetVal = 0;
|
||||||
|
FILE *InF = NULL;
|
||||||
|
FILE *TempF = NULL;
|
||||||
|
- char TempPath[16];
|
||||||
|
+ char *TempPath;
|
||||||
|
struct stat StatBuf;
|
||||||
|
struct utimbuf UTimeBuf;
|
||||||
|
mode_t mode = S_IRUSR | S_IWUSR;
|
||||||
|
@@ -354,8 +386,7 @@ int ConvertDosToUnixOldFile(char* ipInFN
|
||||||
|
else
|
||||||
|
mode = StatBuf.st_mode;
|
||||||
|
|
||||||
|
- strcpy (TempPath, "./u2dtmpXXXXXX");
|
||||||
|
- if((fd=mkstemp (TempPath))<0) {
|
||||||
|
+ if((fd = MakeTempFileFrom(ipInFN, &TempPath))<0) {
|
||||||
|
perror("Failed to open output temp file");
|
||||||
|
RetVal = -1;
|
||||||
|
}
|
||||||
|
@@ -375,6 +406,7 @@ int ConvertDosToUnixOldFile(char* ipInFN
|
||||||
|
if ((!RetVal) && (InF) && ((TempF=OpenOutFile(fd)) == NULL))
|
||||||
|
{
|
||||||
|
fclose (InF);
|
||||||
|
+ InF = NULL;
|
||||||
|
RetVal = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -402,10 +434,6 @@ int ConvertDosToUnixOldFile(char* ipInFN
|
||||||
|
RetVal = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
- /* can delete in file? */
|
||||||
|
- if ((!RetVal) && (unlink(ipInFN) == -1))
|
||||||
|
- RetVal = -1;
|
||||||
|
-
|
||||||
|
/* any error? */
|
||||||
|
if ((RetVal) && (unlink(TempPath)))
|
||||||
|
RetVal = -1;
|
||||||
|
@@ -420,6 +448,7 @@ int ConvertDosToUnixOldFile(char* ipInFN
|
||||||
|
}
|
||||||
|
RetVal = -1;
|
||||||
|
}
|
||||||
|
+ free(TempPath);
|
||||||
|
return RetVal;
|
||||||
|
}
|
||||||
|
|
@ -1,3 +1,9 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Apr 20 15:03:31 CEST 2009 - pth@suse.de
|
||||||
|
|
||||||
|
- Don't destroy original file if the output is on a different file
|
||||||
|
system (bnc#488261).
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Tue Dec 9 17:10:36 CET 2008 - schwab@suse.de
|
Tue Dec 9 17:10:36 CET 2008 - schwab@suse.de
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# spec file for package dos2unix (Version 3.1)
|
# spec file for package dos2unix (Version 3.1)
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
# Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||||
#
|
#
|
||||||
# All modifications and additions to the file contributed by third parties
|
# All modifications and additions to the file contributed by third parties
|
||||||
# remain the property of their copyright owners, unless otherwise agreed
|
# remain the property of their copyright owners, unless otherwise agreed
|
||||||
@ -20,13 +20,14 @@
|
|||||||
Name: dos2unix
|
Name: dos2unix
|
||||||
Summary: A DOS to UNIX Text Converter
|
Summary: A DOS to UNIX Text Converter
|
||||||
Version: 3.1
|
Version: 3.1
|
||||||
Release: 438
|
Release: 439
|
||||||
Group: Productivity/Text/Convertors
|
Group: Productivity/Text/Convertors
|
||||||
License: BSD 3-Clause
|
License: BSD 3-Clause
|
||||||
Source: %{name}-%{version}.tar.bz2
|
Source: %{name}-%{version}.tar.bz2
|
||||||
Patch0: %{name}-%{version}.patch
|
Patch0: %{name}-%{version}.patch
|
||||||
Patch1: dos2unix-3.1-segfault.patch
|
Patch1: dos2unix-3.1-segfault.patch
|
||||||
Patch2: dos2unix-3.1-preserve-file-modes.patch
|
Patch2: dos2unix-3.1-preserve-file-modes.patch
|
||||||
|
Patch3: dos2unix-bnc#488261-dont_destroy_original.patch
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
|
|
||||||
%description
|
%description
|
||||||
@ -44,6 +45,7 @@ Authors:
|
|||||||
%patch0 -p1 -b .orig
|
%patch0 -p1 -b .orig
|
||||||
%patch1 -p1 -b .segf
|
%patch1 -p1 -b .segf
|
||||||
%patch2 -b .fmode
|
%patch2 -b .fmode
|
||||||
|
%patch3
|
||||||
perl -pi -e 's,(#endif|#else)[^ ]*(.*),$1 /* $2 */,g' *.[ch]
|
perl -pi -e 's,(#endif|#else)[^ ]*(.*),$1 /* $2 */,g' *.[ch]
|
||||||
|
|
||||||
%build
|
%build
|
||||||
@ -69,6 +71,9 @@ ln -s dos2unix.1 $RPM_BUILD_ROOT%{_mandir}/man1/mac2unix.1
|
|||||||
rm -rf $RPM_BUILD_ROOT
|
rm -rf $RPM_BUILD_ROOT
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Apr 20 2009 pth@suse.de
|
||||||
|
- Don't destroy original file if the output is on a different file
|
||||||
|
system (bnc#488261).
|
||||||
* Tue Dec 09 2008 schwab@suse.de
|
* Tue Dec 09 2008 schwab@suse.de
|
||||||
- Fix last change.
|
- Fix last change.
|
||||||
* Mon Sep 15 2008 ro@suse.de
|
* Mon Sep 15 2008 ro@suse.de
|
||||||
|
Loading…
x
Reference in New Issue
Block a user