X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libsrc%2Fcommon%2Fgets.c;h=4da352430177d65d0620488876a413a88c3020a2;hb=f16516047a551319c82debd339ded8bc2b587212;hp=4177522d42fa7fe65b864fb0c9143e429d3bd0c5;hpb=53dd513176425872128ef26031d00952ef7a0628;p=cc65 diff --git a/libsrc/common/gets.c b/libsrc/common/gets.c index 4177522d4..4da352430 100644 --- a/libsrc/common/gets.c +++ b/libsrc/common/gets.c @@ -11,38 +11,48 @@ -char* gets (char* s) +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +char* __fastcall__ gets (char* s) { - int i, c; - - i = 0; - do { - - /* Get next character */ - c = fgetc (stdin); - if (c == -1) { - /* 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'; + register char* p = s; + int c; + 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; @@ -50,3 +60,4 @@ char* gets (char* s) +