X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libsrc%2Fcommon%2Fgets.c;h=4da352430177d65d0620488876a413a88c3020a2;hb=f16516047a551319c82debd339ded8bc2b587212;hp=b9dd0017041e8cd37fb027672ff850cd373a3ac8;hpb=3b4112ae0ca9835e12ea5142ead10ed0065ec1bb;p=cc65 diff --git a/libsrc/common/gets.c b/libsrc/common/gets.c index b9dd00170..4da352430 100644 --- a/libsrc/common/gets.c +++ b/libsrc/common/gets.c @@ -11,37 +11,48 @@ -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) +