]> git.sur5r.net Git - cc65/commitdiff
Changes for better code generation.
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 10 Jun 2012 18:55:22 +0000 (18:55 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 10 Jun 2012 18:55:22 +0000 (18:55 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@5703 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/common/gets.c

index 377e0ba537b4bf7055006cd62108088a7808a4a2..66690bab33eddc7ddc99eb6c3e969060129b105d 100644 (file)
 
 char* __fastcall__ gets (char* s)
 {
+    register char* p = s;
     int c;
-    int i = 0;
+    unsigned i = 0;
 
-    do {
+    while (1) {
 
                /* Get next character */
                if ((c = fgetc (stdin)) == EOF) {
                    /* Error or EOF */
-                   s [i] = 0;
+                   *p = '\0';
                    if (stdin->f_flags & _FERROR) {
-                       /* ERROR */
-                       return 0;
+                       /* ERROR */
+                       return 0;
                    } else {
                        /* EOF */
-               if (i) {
-                   return s;
-               } else {
-                   return 0;
-               }
+               if (i) {
+                   return s;
+               } else {
+                   return 0;
+               }
            }
                }
 
-               /* One char more */
-               s [i++] = c;
+               /* One char more. Newline ends the input */
+        if ((char) c == '\n') {
+            *p = '\0';
+            break;
+        } else {
+            *p = c;
+            ++p;
+            ++i;
+        }
 
-    } while (c != '\n');
-
-    /* Replace newline by NUL */
-    s [i-1] = '\0';
+    }
 
     /* Done */
     return s;
@@ -55,4 +60,4 @@ char* __fastcall__ gets (char* s)
 
 
 
-                  
+