]> git.sur5r.net Git - cc65/blobdiff - libsrc/common/gets.c
cleanups and add more comments
[cc65] / libsrc / common / gets.c
index b9dd0017041e8cd37fb027672ff850cd373a3ac8..4da352430177d65d0620488876a413a88c3020a2 100644 (file)
 
 
 
-char* gets (char* s)
+/*****************************************************************************/
+/*                                   Code                                    */
+/*****************************************************************************/
+
+
+
+char* __fastcall__ gets (char* s)
 {
+    register char* p = s;
     int c;
-    int i = 0;
-
-    do {
-
-               /* Get next character */
-               if ((c = fgetc (stdin)) == EOF) {
-                   /* Error or EOF */
-                   s [i] = 0;
-                   if (stdin->f_flags & _FERROR) {
-                       /* ERROR */
-                       return 0;
-                   } else {
-                       /* EOF */
-               if (i) {
-                   return s;
-               } else {
-                   return 0;
-               }
-           }
-               }
-
-               /* One char more */
-               s [i++] = c;
-
-    } while (c != '\n');
-
-    /* Replace newline by NUL */
-    s [i-1] = '\0';
+    unsigned i = 0;
+
+    while (1) {
+
+        /* Get next character */
+        if ((c = fgetc (stdin)) == EOF) {
+            /* Error or EOF */
+            *p = '\0';
+            if (stdin->f_flags & _FERROR) {
+                /* ERROR */
+                return 0;
+            } else {
+                /* EOF */
+                if (i) {
+                    return s;
+                } else {
+                    return 0;
+                }
+            }
+        }
+
+        /* One char more. Newline ends the input */
+        if ((char) c == '\n') {
+            *p = '\0';
+            break;
+        } else {
+            *p = c;
+            ++p;
+            ++i;
+        }
+
+    }
 
     /* Done */
     return s;
@@ -49,3 +60,4 @@ char* gets (char* s)
 
 
 
+