X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libsrc%2Fcommon%2Fgets.c;h=4da352430177d65d0620488876a413a88c3020a2;hb=f16516047a551319c82debd339ded8bc2b587212;hp=377e0ba537b4bf7055006cd62108088a7808a4a2;hpb=6966ccda7ea952a6329055751c432b62c853dd8e;p=cc65 diff --git a/libsrc/common/gets.c b/libsrc/common/gets.c index 377e0ba53..4da352430 100644 --- a/libsrc/common/gets.c +++ b/libsrc/common/gets.c @@ -12,42 +12,47 @@ /*****************************************************************************/ -/* Code */ +/* 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; @@ -55,4 +60,4 @@ char* __fastcall__ gets (char* s) - +