+ /*
+ * If we get an EOF, return
+ */
+ if (feof(stdin))
+ siglongjmp (sigenv, 1);
+
+ /*
+ * For errors, if we get an EINTR that means that we got
+ * a signal and we should retry. If we get another error,
+ * then just return.
+ */
+
+ else if (ferror(stdin)) {
+ if (errno == EINTR) {
+ clearerr(stdin);
+ continue;
+ }
+ fprintf(stderr, "\nError %s during read\n",
+ strerror(errno));
+ siglongjmp (sigenv, 1);
+ } else {
+ /*
+ * Just for completeness's sake ...
+ */
+
+ fprintf(stderr, "\nUnknown problem in getchar()\n");
+ siglongjmp (sigenv, 1);
+ }