svn commit: [25968] trunk/busybox/shell
vda at busybox.net
vda at busybox.net
Sun Apr 5 22:17:04 UTC 2009
Author: vda
Date: 2009-04-05 22:17:04 +0000 (Sun, 05 Apr 2009)
New Revision: 25968
Log:
hush: strip NULs from file input, they are PITA/impossible to handle correctly
function old new delta
file_peek 89 93 +4
file_get 260 264 +4
Modified:
trunk/busybox/shell/hush.c
Changeset:
Modified: trunk/busybox/shell/hush.c
===================================================================
--- trunk/busybox/shell/hush.c 2009-04-05 21:19:43 UTC (rev 25967)
+++ trunk/busybox/shell/hush.c 2009-04-05 22:17:04 UTC (rev 25968)
@@ -1225,6 +1225,7 @@
ch = *i->p++;
if (i->eof_flag && !*i->p)
ch = EOF;
+ /* note: ch is never NUL */
} else {
/* need to double check i->file because we might be doing something
* more complicated by now, like sourcing or substituting. */
@@ -1238,9 +1239,9 @@
goto take_cached;
}
#endif
- ch = fgetc(i->file);
+ do ch = fgetc(i->file); while (ch == '\0');
}
- debug_printf("file_get: got a '%c' %d\n", ch, ch);
+ debug_printf("file_get: got '%c' %d\n", ch, ch);
#if ENABLE_HUSH_INTERACTIVE
if (ch == '\n')
i->promptme = 1;
@@ -1248,8 +1249,8 @@
return ch;
}
-/* All the callers guarantee this routine will never be
- * used right after a newline, so prompting is not needed.
+/* All callers guarantee this routine will never
+ * be used right after a newline, so prompting is not needed.
*/
static int file_peek(struct in_str *i)
{
@@ -1258,13 +1259,14 @@
if (i->eof_flag && !i->p[1])
return EOF;
return *i->p;
+ /* note: ch is never NUL */
}
- ch = fgetc(i->file);
+ do ch = fgetc(i->file); while (ch == '\0');
i->eof_flag = (ch == EOF);
i->peek_buf[0] = ch;
i->peek_buf[1] = '\0';
i->p = i->peek_buf;
- debug_printf("file_peek: got a '%c' %d\n", *i->p, *i->p);
+ debug_printf("file_peek: got '%c' %d\n", ch, ch);
return ch;
}
More information about the busybox-cvs
mailing list