From 755e19b1bf0644ce9f3e7af79faae305bf66f7bb Mon Sep 17 00:00:00 2001 From: riel Date: Sep 26 2004 21:20:56 +0000 Subject: safer conversion w/ mac2unix (fix from bz #57508) --- diff --git a/dos2unix-3.1-safeconv.patch b/dos2unix-3.1-safeconv.patch new file mode 100644 index 0000000..8ea8931 --- /dev/null +++ b/dos2unix-3.1-safeconv.patch @@ -0,0 +1,88 @@ +* Fix http://bugzilla.redhat.com/57508 (make dos2unix not modify Mac + files unless in mac2unix mode) +* Make mac2unix mode not create duplicate Unix line delimiters when + run on a DOS file. (mschwendt@users.sf.net) + +diff -Nur dos2unix-3.1-orig/dos2unix.c dos2unix-3.1/dos2unix.c +--- dos2unix-3.1-orig/dos2unix.c 1998-11-19 13:19:25.000000000 +0100 ++++ dos2unix-3.1/dos2unix.c 2004-09-26 20:57:41.606587616 +0200 +@@ -153,6 +153,24 @@ + } + + ++int StripDelimiter(FILE* ipInF, FILE* ipOutF, CFlag *ipFlag, int CurChar) ++{ ++ int TempNextChar; ++ /* Don't modify Mac files when in dos2unix mode. */ ++ if ( (TempNextChar = getc(ipInF)) != EOF) { ++ ungetc( TempNextChar, ipInF ); /* put back peek char */ ++ if ( TempNextChar != '\x0a' ) { ++ putc( CurChar, ipOutF ); /* Mac line, put back CR */ ++ } ++ } ++ else if ( CurChar == '\x0d' ) { /* EOF: last Mac line delimiter (CR)? */ ++ putc( CurChar, ipOutF ); ++ } ++ if (ipFlag->NewLine) { /* add additional LF? */ ++ putc('\n', ipOutF); ++ } ++} ++ + /* converts stream ipInF to UNIX format text and write to stream ipOutF + * RetVal: 0 if success + * -1 otherwise +@@ -161,6 +179,7 @@ + { + int RetVal = 0; + int TempChar; ++ int TempNextChar; + + if ( macmode ) + ipFlag->ConvMode = 3; +@@ -177,9 +196,7 @@ + break; + } + } else { +- if (ipFlag->NewLine) { +- putc('\n', ipOutF); +- } ++ StripDelimiter( ipInF, ipOutF, ipFlag, TempChar ); + } + } + break; +@@ -193,9 +210,7 @@ + break; + } + } else { +- if (ipFlag->NewLine) { +- putc('\n', ipOutF); +- } ++ StripDelimiter( ipInF, ipOutF, ipFlag, TempChar ); + } + } + break; +@@ -209,9 +224,7 @@ + break; + } + } else { +- if (ipFlag->NewLine) { +- putc('\n', ipOutF); +- } ++ StripDelimiter( ipInF, ipOutF, ipFlag, TempChar ); + } + } + break; +@@ -227,6 +240,13 @@ + } + } + else{ ++ if ( (TempNextChar = getc(ipInF)) != EOF) { ++ ungetc( TempNextChar, ipInF ); /* put back peek char */ ++ /* Don't touch this delimiter if it's a CR,LF pair. */ ++ if ( TempNextChar == '\x0a' ) { ++ continue; ++ } ++ } + if (putc('\x0a', ipOutF) == EOF) + { + RetVal = -1; diff --git a/dos2unix.spec b/dos2unix.spec index 0c96147..45ebe97 100644 --- a/dos2unix.spec +++ b/dos2unix.spec @@ -1,12 +1,13 @@ Summary: Text file format converter Name: dos2unix Version: 3.1 -Release: 18 +Release: 19 Group: Applications/Text License: Freely distributable Source: %{name}-%{version}.tar.bz2 Patch0: %{name}-%{version}.patch Patch1: dos2unix-3.1-segfault.patch +Patch2: dos2unix-3.1-safeconv.patch Buildroot: %{_tmppath}/%{name}-%{version}-root %description @@ -16,6 +17,7 @@ Dos2unix converts DOS or MAC text files to UNIX format. %setup -q %patch0 -p1 -b .orig %patch1 -p1 -b .segf +%patch2 -p1 -b .safe for I in *.[ch]; do sed -e 's,#endif.*,#endif,g' -e 's,#else.*,#else,g' $I > $I.new mv -f $I.new $I @@ -46,6 +48,9 @@ install -m444 mac2unix.1 $RPM_BUILD_ROOT%{_mandir}/man1 rm -rf $RPM_BUILD_ROOT %changelog +* Sun Sep 26 2004 Rik van Riel 3.1-19 +- safer conversion w/ mac2unix (fix from bz #57508) + * Tue Jun 15 2004 Elliot Lee - rebuilt