/* Iterate on command lines, interpreting user commands (interactive mode) */
while(1)
{
+ int ret;
+
printf("backup> ");
fflush(stdout);
- while (LWP_GetLine(lineBuffer, sizeof(lineBuffer)) == 0)
+ while ((ret = LWP_GetLine(lineBuffer, sizeof(lineBuffer))) == 0)
printf("%s: Command line too long\n", whoami); /* line too long */
-
+
+ if (ret == -1) return 0; /* Got EOF */
+
if ( !LineIsBlank(lineBuffer) )
{
code = cmd_ParseLine(lineBuffer, targv, &targc, MAXV);
* Return Value:
* n - a whole line has been read.(has n chars)
* 0 - buf not big enough.
+ * -1 - line with only EOF
*/
int LWP_GetLine(char *linebuf, int len)
{
LWP_WaitForKeystroke(-1);
ch = getch();
+
+ if ((ch == EOF) && (cnt == 0))
+ return -1;
+
if (ch == '\b') {/* print and throw away a backspace */
if (!cnt) /* if we are at the start of the line don't bspace */
continue;
* Return Value:
* n - a whole line has been read.(has n chars)
* 0 - buf not big enough.
+ * -1 - line with only EOF
*/
int LWP_GetLine(char *linebuf, int len)
{
int linelen;
+ char *s;
LWP_WaitForKeystroke(-1);
- fgets(linebuf, len, stdin);
+ s = fgets(linebuf, len, stdin);
+ if (s == NULL) return -1;
+
linelen = strlen(linebuf);
if (linebuf[linelen-1] != '\n') /* buffer too small */
return 0;