]> git.wh0rd.org Git - nano.git/commitdiff
in read_file(), improve autodetection of DOS and Mac format files to not
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Sat, 17 Nov 2007 20:34:38 +0000 (20:34 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Sat, 17 Nov 2007 20:34:38 +0000 (20:34 +0000)
trigger on carriage returns in the middle of files, as found by Kjell
Braden

git-svn-id: svn://svn.savannah.gnu.org/nano/branches/nano_2_0_branch/nano@4179 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
src/files.c

index b62005fbb07e2b7de81bb243c3b95bdd8d037a9c..3d2bfdc052badac03193dc86acaa483684b2f224 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -43,6 +43,10 @@ CVS code -
        - Simplify and rewrite to use the strncasecmp() equivalents.
          (DLR)
 - files.c:
+  read_file()
+       - Improve autodetection of DOS and Mac format files to not
+         trigger on carriage returns in the middle of files. (DLR,
+         found by Kjell Braden)
   do_insertfile()
        - Make sure the mark is always properly positioned after
          inserting a file with the mark on. (DLR)
index da0ff9cd13b5f65c43cd4a1f8a95b4a95e57efe0..a74054d23641ce358be180114f4eab49ee36c2ae 100644 (file)
@@ -382,12 +382,15 @@ void read_file(FILE *f, const char *filename)
         * conversion isn't disabled, handle it! */
        if (input == '\n') {
 #ifndef NANO_TINY
-           /* If there's a '\r' before the '\n', set format to DOS if
-            * we currently think this is a *nix file, or to both if we
-            * currently think it's a Mac file. */
-           if (!ISSET(NO_CONVERT) && i > 0 && buf[i - 1] == '\r' &&
-               (format == 0 || format == 2))
-               format++;
+           /* If it's a DOS file or a DOS/Mac file ('\r' before '\n' on
+            * the first line if we think it's a *nix file, or on any
+            * line otherwise), and file conversion isn't disabled,
+            * handle it! */
+           if (!ISSET(NO_CONVERT) && (num_lines == 0 || format != 0) &&
+               i > 0 && buf[i - 1] == '\r') {
+               if (format == 0 || format == 2)
+                   format++;
+           }
 #endif
 
            /* Read in the line properly. */
@@ -401,9 +404,11 @@ void read_file(FILE *f, const char *filename)
            buf[0] = '\0';
            i = 0;
 #ifndef NANO_TINY
-       /* If it's a Mac file ('\r' without '\n'), and file conversion
-        * isn't disabled, handle it! */
-       } else if (!ISSET(NO_CONVERT) && i > 0 && buf[i - 1] == '\r') {
+       /* If it's a Mac file ('\r' without '\n' on the first line if we
+        * think it's a *nix file, or on any line otherwise), and file
+        * conversion isn't disabled, handle it! */
+       } else if (!ISSET(NO_CONVERT) && (num_lines == 0 ||
+               format != 0) && i > 0 && buf[i - 1] == '\r') {
            /* If we currently think the file is a *nix file, set format
             * to Mac.  If we currently think the file is a DOS file,
             * set format to both DOS and Mac. */