use alt signal stack when present for implementation-internal signals
[musl] / src / stdio / gets.c
index 24319eb..17963b9 100644 (file)
@@ -1,8 +1,15 @@
 #include "stdio_impl.h"
+#include <limits.h>
+#include <string.h>
 
 char *gets(char *s)
 {
-       char *ret = fgets(s, INT_MAX, stdin);
-       if (ret && s[strlen(s)-1] == '\n') s[strlen(s)-1] = 0;
-       return ret;
+       size_t i=0;
+       int c;
+       FLOCK(stdin);
+       while ((c=getc_unlocked(stdin)) != EOF && c != '\n') s[i++] = c;
+       s[i] = 0;
+       if (c != '\n' && (!feof(stdin) || !i)) s = 0;
+       FUNLOCK(stdin);
+       return s;
 }