From eaba011132f81281780be9800e26abfae009fede Mon Sep 17 00:00:00 2001 From: "H. Peter Anvin" Date: Fri, 29 May 2009 15:10:31 -0700 Subject: [PATCH] Run Nindent on com32/rosh/rosh.c Automatically reformat com32/rosh/rosh.c using Nindent. Do this for all files except HDT, gPXE and externally maintained libraries (zlib, tinyjpeg, libpng). Signed-off-by: H. Peter Anvin --- com32/rosh/rosh.c | 1090 ++++++++++++++++++++++++++++------------------------- 1 file changed, 574 insertions(+), 516 deletions(-) diff --git a/com32/rosh/rosh.c b/com32/rosh/rosh.c index 659df8a..9a4edae 100644 --- a/com32/rosh/rosh.c +++ b/com32/rosh/rosh.c @@ -39,19 +39,21 @@ void rosh_version() { - printf("%s v %s; (c) %s %s.\n", APP_LONGNAME, APP_VER, APP_YEAR, \ - APP_AUTHOR); + printf("%s v %s; (c) %s %s.\n", APP_LONGNAME, APP_VER, APP_YEAR, + APP_AUTHOR); } void rosh_help(int type) { - rosh_version(); - switch (type) { - case 2: puts(rosh_help_str2); - break; - case 1: default: - puts(rosh_help_str1); - } + rosh_version(); + switch (type) { + case 2: + puts(rosh_help_str2); + break; + case 1: + default: + puts(rosh_help_str1); + } } /* Determine if a character is whitespace @@ -60,14 +62,17 @@ void rosh_help(int type) */ int rosh_issp(char inc) { - int rv; - switch (inc){ - case ' ': case '\t': - rv = 1; break; - default: rv = 0; - } - return rv; -} /* ros_issp */ + int rv; + switch (inc) { + case ' ': + case '\t': + rv = 1; + break; + default: + rv = 0; + } + return rv; +} /* ros_issp */ /* Search a string for first non-space (' ') character, starting at ipos * istr input string to parse @@ -75,14 +80,14 @@ int rosh_issp(char inc) */ int rosh_search_nonsp(const char *istr, const int ipos) { - int curpos; - char c; - - curpos = ipos; - c = istr[curpos]; - while (rosh_issp(c) && c != 0) - c = istr[++curpos]; - return curpos; + int curpos; + char c; + + curpos = ipos; + c = istr[curpos]; + while (rosh_issp(c) && c != 0) + c = istr[++curpos]; + return curpos; } /* Search a string for space (' '), returning the position of the next space @@ -92,14 +97,14 @@ int rosh_search_nonsp(const char *istr, const int ipos) */ int rosh_search_sp(const char *istr, const int ipos) { - int curpos; - char c; - - curpos = ipos; - c = istr[curpos]; - while (!(rosh_issp(c)) && c != 0) - c = istr[++curpos]; - return curpos; + int curpos; + char c; + + curpos = ipos; + c = istr[curpos]; + while (!(rosh_issp(c)) && c != 0) + c = istr[++curpos]; + return curpos; } /* Parse a string for the first non-space string, returning the end position @@ -110,23 +115,23 @@ int rosh_search_sp(const char *istr, const int ipos) */ int rosh_parse_sp_1(char *dest, const char *src, const int ipos) { - int bpos, epos; /* beginning and ending position of source string - to copy to destination string */ + int bpos, epos; /* beginning and ending position of source string + to copy to destination string */ - bpos = 0; - epos = 0; + bpos = 0; + epos = 0; /* //HERE-error condition checking */ - bpos = rosh_search_nonsp(src, ipos); - epos = rosh_search_sp(src, bpos); - if (epos > bpos) { - memcpy(dest, src + bpos, epos-bpos); - if (dest[epos - bpos] != 0) - dest[epos - bpos] = 0; - } else { - epos = strlen(src); - dest[0] = 0; - } - return epos; + bpos = rosh_search_nonsp(src, ipos); + epos = rosh_search_sp(src, bpos); + if (epos > bpos) { + memcpy(dest, src + bpos, epos - bpos); + if (dest[epos - bpos] != 0) + dest[epos - bpos] = 0; + } else { + epos = strlen(src); + dest[0] = 0; + } + return epos; } /* Handle most/all errors @@ -136,22 +141,27 @@ int rosh_parse_sp_1(char *dest, const char *src, const int ipos) */ void rosh_error(const int ierrno, const char *cmdstr, const char *filestr) { - printf("--ERROR: %s '%s': ", cmdstr, filestr); - switch (ierrno) { - case EACCES: printf("Access DENIED\n"); - break; - case ENOENT: printf("not found\n"); - /* SYSLinux-3.72 COM32 API returns this for a - directory or empty file */ - ROSH_COM32(" (COM32) could be a directory or empty file\n"); - break; - case ENOTDIR: printf("not a directory\n"); - ROSH_COM32(" (COM32) could be directory\n"); - break; - case ENOSYS: printf("not implemented"); - break; - default: printf("returns error; errno=%d\n", ierrno); - } + printf("--ERROR: %s '%s': ", cmdstr, filestr); + switch (ierrno) { + case EACCES: + printf("Access DENIED\n"); + break; + case ENOENT: + printf("not found\n"); + /* SYSLinux-3.72 COM32 API returns this for a + directory or empty file */ + ROSH_COM32(" (COM32) could be a directory or empty file\n"); + break; + case ENOTDIR: + printf("not a directory\n"); + ROSH_COM32(" (COM32) could be directory\n"); + break; + case ENOSYS: + printf("not implemented"); + break; + default: + printf("returns error; errno=%d\n", ierrno); + } } /* Concatenate command line arguments into one string @@ -162,36 +172,36 @@ void rosh_error(const int ierrno, const char *cmdstr, const char *filestr) */ int rosh_argcat(char *cmdstr, const int argc, char *argv[], const int barg) { - int i, arglen, curpos; /* index, argument length, current position - in cmdstr */ - curpos = 0; - cmdstr[0] = '\0'; /* Nullify string just to be sure */ - for (i = barg; i < argc; i++) { - arglen = strlen(argv[i]); - /* Theoretically, this should never be met in SYSLINUX */ - if ((curpos + arglen) > (ROSH_CMD_SZ - 1)) - arglen = (ROSH_CMD_SZ - 1) - curpos; - memcpy(cmdstr + curpos, argv[i], arglen); - curpos += arglen; - if (curpos >= (ROSH_CMD_SZ - 1)) { - /* Hopefully, curpos should not be greater than - (ROSH_CMD_SZ - 1) */ - /* Still need a '\0' at the last character */ - cmdstr[(ROSH_CMD_SZ - 1)] = 0; - break; /* Escape out of the for() loop; - We can no longer process anything more */ - } else { - cmdstr[curpos] = ' '; - curpos += 1; - cmdstr[curpos] = 0; - } + int i, arglen, curpos; /* index, argument length, current position + in cmdstr */ + curpos = 0; + cmdstr[0] = '\0'; /* Nullify string just to be sure */ + for (i = barg; i < argc; i++) { + arglen = strlen(argv[i]); + /* Theoretically, this should never be met in SYSLINUX */ + if ((curpos + arglen) > (ROSH_CMD_SZ - 1)) + arglen = (ROSH_CMD_SZ - 1) - curpos; + memcpy(cmdstr + curpos, argv[i], arglen); + curpos += arglen; + if (curpos >= (ROSH_CMD_SZ - 1)) { + /* Hopefully, curpos should not be greater than + (ROSH_CMD_SZ - 1) */ + /* Still need a '\0' at the last character */ + cmdstr[(ROSH_CMD_SZ - 1)] = 0; + break; /* Escape out of the for() loop; + We can no longer process anything more */ + } else { + cmdstr[curpos] = ' '; + curpos += 1; + cmdstr[curpos] = 0; } - /* If there's a ' ' at the end, remove it. This is normal unless - the maximum length is met/exceeded. */ - if (cmdstr[curpos - 1] == ' ') - cmdstr[--curpos] = 0; - return curpos; -} /* rosh_argcat */ + } + /* If there's a ' ' at the end, remove it. This is normal unless + the maximum length is met/exceeded. */ + if (cmdstr[curpos - 1] == ' ') + cmdstr[--curpos] = 0; + return curpos; +} /* rosh_argcat */ /* * Prints a lot of the data in a struct termios @@ -216,16 +226,16 @@ void rosh_print_tc(struct termios *tio) */ void rosh_console_raw() { -// struct termios itio, ntio; -// tcgetattr(0, &itio); -// rosh_print_tc(&itio); +// struct termios itio, ntio; +// tcgetattr(0, &itio); +// rosh_print_tc(&itio); /* ntio = itio; ntio.c_lflag &= ~(ICANON|ECHO); tcsetattr(0, TCSAFLUSH, &ntio);*/ - console_ansi_raw(); /* Allows get_key to get just 1 key sequence - (w/o delay or display */ -// tcgetattr(0, &ntio); -// rosh_print_tc(&ntio); + console_ansi_raw(); /* Allows get_key to get just 1 key sequence + (w/o delay or display */ +// tcgetattr(0, &ntio); +// rosh_print_tc(&ntio); } /* @@ -233,9 +243,9 @@ void rosh_console_raw() */ void rosh_console_std() { -// struct termios itio, ntio; - console_ansi_std(); -// tcsetattr(0, TCSANOW, &itio); +// struct termios itio, ntio; + console_ansi_std(); +// tcsetattr(0, TCSANOW, &itio); } /* @@ -244,16 +254,16 @@ void rosh_console_std() */ int rosh_getkey() { - int inc; + int inc; - inc = KEY_NONE; -// rosh_console_raw(); - while (inc == KEY_NONE){ - inc = get_key(stdin, 6000); - } -// rosh_console_std(); - return inc; -} /* rosh_getkey */ + inc = KEY_NONE; +// rosh_console_raw(); + while (inc == KEY_NONE) { + inc = get_key(stdin, 6000); + } +// rosh_console_std(); + return inc; +} /* rosh_getkey */ /* Template for command functions * cmdstr command string to process @@ -262,9 +272,8 @@ int rosh_getkey() */ void rosh_1(const char *cmdstr, const char *pwdstr, const char *ipwdstr) { - ROSH_DEBUG("CMD: '%s'\npwd: '%s'\npwd: '%s'\n", cmdstr, pwdstr, \ - ipwdstr); -} /* rosh_1 */ + ROSH_DEBUG("CMD: '%s'\npwd: '%s'\npwd: '%s'\n", cmdstr, pwdstr, ipwdstr); +} /* rosh_1 */ /* Concatenate multiple files to stdout * cmdstr command string to process @@ -272,35 +281,35 @@ void rosh_1(const char *cmdstr, const char *pwdstr, const char *ipwdstr) */ void rosh_cat(const char *cmdstr, const char *pwdstr) { - FILE *f; - char filestr[ROSH_PATH_SZ + 1]; - char buf[ROSH_BUF_SZ]; - int numrd; - int cmdpos; - - ROSH_DEBUG("CMD: '%s'\npwd: '%s'\n", cmdstr, pwdstr); - /* Initialization */ - filestr[0] = 0; - cmdpos = 0; - /* skip the first word */ - cmdpos = rosh_parse_sp_1(filestr, cmdstr, cmdpos); - cmdpos = rosh_parse_sp_1(filestr, cmdstr, cmdpos); - while (strlen(filestr) > 0) { - printf("--File = '%s'\n", filestr); - f = fopen(filestr, "r"); - if (f != NULL) { - numrd = fread(buf, 1, ROSH_BUF_SZ, f); - while (numrd > 0) { - fwrite(buf, 1, numrd, stdout); - numrd = fread(buf, 1, ROSH_BUF_SZ, f); - } - fclose(f); - } else { - rosh_error(errno, "cat", filestr); - } - cmdpos = rosh_parse_sp_1(filestr, cmdstr, cmdpos); + FILE *f; + char filestr[ROSH_PATH_SZ + 1]; + char buf[ROSH_BUF_SZ]; + int numrd; + int cmdpos; + + ROSH_DEBUG("CMD: '%s'\npwd: '%s'\n", cmdstr, pwdstr); + /* Initialization */ + filestr[0] = 0; + cmdpos = 0; + /* skip the first word */ + cmdpos = rosh_parse_sp_1(filestr, cmdstr, cmdpos); + cmdpos = rosh_parse_sp_1(filestr, cmdstr, cmdpos); + while (strlen(filestr) > 0) { + printf("--File = '%s'\n", filestr); + f = fopen(filestr, "r"); + if (f != NULL) { + numrd = fread(buf, 1, ROSH_BUF_SZ, f); + while (numrd > 0) { + fwrite(buf, 1, numrd, stdout); + numrd = fread(buf, 1, ROSH_BUF_SZ, f); + } + fclose(f); + } else { + rosh_error(errno, "cat", filestr); } -} /* rosh_cat */ + cmdpos = rosh_parse_sp_1(filestr, cmdstr, cmdpos); + } +} /* rosh_cat */ /* Change PWD (Present Working Directory) * cmdstr command string to process @@ -309,29 +318,30 @@ void rosh_cat(const char *cmdstr, const char *pwdstr) */ void rosh_cd(const char *cmdstr, char *pwdstr, const char *ipwdstr) { - int rv; - char filestr[ROSH_PATH_SZ + 1]; - int cmdpos; - ROSH_DEBUG("CMD: '%s'\npwd: '%s'\n", cmdstr, pwdstr); - /* Initialization */ - filestr[0] = 0; - cmdpos = 0; - rv = 0; - /* skip the first word */ - cmdpos = rosh_parse_sp_1(filestr, cmdstr, cmdpos); - cmdpos = rosh_parse_sp_1(filestr, cmdstr, cmdpos); - ROSH_COM32(" -- cd (Change Directory) not implemented for use with run and exit.\n"); - if (strlen(filestr) != 0) - rv = chdir(filestr); - else - rv = chdir(ipwdstr); - if (rv != 0) { - rosh_error(errno, "cd", filestr); - } else { - getcwd(pwdstr, ROSH_PATH_SZ + 1); - printf(" %s\n", pwdstr); - } -} /* rosh_cd */ + int rv; + char filestr[ROSH_PATH_SZ + 1]; + int cmdpos; + ROSH_DEBUG("CMD: '%s'\npwd: '%s'\n", cmdstr, pwdstr); + /* Initialization */ + filestr[0] = 0; + cmdpos = 0; + rv = 0; + /* skip the first word */ + cmdpos = rosh_parse_sp_1(filestr, cmdstr, cmdpos); + cmdpos = rosh_parse_sp_1(filestr, cmdstr, cmdpos); + ROSH_COM32 + (" -- cd (Change Directory) not implemented for use with run and exit.\n"); + if (strlen(filestr) != 0) + rv = chdir(filestr); + else + rv = chdir(ipwdstr); + if (rv != 0) { + rosh_error(errno, "cd", filestr); + } else { + getcwd(pwdstr, ROSH_PATH_SZ + 1); + printf(" %s\n", pwdstr); + } +} /* rosh_cd */ /* Print the syslinux config file name * cmdstr command string to process @@ -339,9 +349,9 @@ void rosh_cd(const char *cmdstr, char *pwdstr, const char *ipwdstr) */ void rosh_cfg(const char *cmdstr, const char *pwdstr) { - ROSH_DEBUG("CMD: '%s'\npwd: '%s'\n", cmdstr, pwdstr); - printf("CFG: '%s'\n", syslinux_config_file()); -} /* rosh_cfg */ + ROSH_DEBUG("CMD: '%s'\npwd: '%s'\n", cmdstr, pwdstr); + printf("CFG: '%s'\n", syslinux_config_file()); +} /* rosh_cfg */ /* Simple directory listing for one argument (file/directory) based on * filestr and pwdstr @@ -350,110 +360,117 @@ void rosh_cfg(const char *cmdstr, const char *pwdstr) */ void rosh_dir_arg(const char *ifilstr, const char *pwdstr) { - struct stat fdstat; - int status; - int fd; - char filestr[ROSH_PATH_SZ + 1]; - int filepos; - DIR *d; - struct dirent *de; + struct stat fdstat; + int status; + int fd; + char filestr[ROSH_PATH_SZ + 1]; + int filepos; + DIR *d; + struct dirent *de; #ifdef DO_DEBUG - char filestr2[ROSH_PATH_SZ + 1]; - int fd2, file2pos; + char filestr2[ROSH_PATH_SZ + 1]; + int fd2, file2pos; #ifdef __COM32__ -// int inchar; - char ty; -#endif /* __COM32__ */ -#endif /* DO_DEBUG */ - - /* Initialization; make filestr based on leading character of ifilstr - and pwdstr */ - if (ifilstr[0] == SEP) { - strcpy(filestr, ifilstr); - } else { - strcpy(filestr, pwdstr); - filepos = strlen(pwdstr); - if (filestr[filepos-1] != SEP) - filestr[filepos++] = SEP; - strcpy(filestr + filepos, ifilstr); -ROSH_DEBUG("--'%s'\n", filestr); - } - fd = open(filestr, O_RDONLY); - if (fd != -1) { - status = fstat(fd, &fdstat); - if (S_ISDIR(fdstat.st_mode)) { - ROSH_DEBUG("PATH '%s' is a directory\n", ifilstr); - d = fdopendir(fd); - de = readdir(d); - while (de != NULL) { +// int inchar; + char ty; +#endif /* __COM32__ */ +#endif /* DO_DEBUG */ + + /* Initialization; make filestr based on leading character of ifilstr + and pwdstr */ + if (ifilstr[0] == SEP) { + strcpy(filestr, ifilstr); + } else { + strcpy(filestr, pwdstr); + filepos = strlen(pwdstr); + if (filestr[filepos - 1] != SEP) + filestr[filepos++] = SEP; + strcpy(filestr + filepos, ifilstr); + ROSH_DEBUG("--'%s'\n", filestr); + } + fd = open(filestr, O_RDONLY); + if (fd != -1) { + status = fstat(fd, &fdstat); + if (S_ISDIR(fdstat.st_mode)) { + ROSH_DEBUG("PATH '%s' is a directory\n", ifilstr); + d = fdopendir(fd); + de = readdir(d); + while (de != NULL) { #ifdef DO_DEBUG - filestr2[0] = 0; - file2pos = strlen(filestr); - memcpy(filestr2, filestr, file2pos); - filestr2[file2pos] = '/'; - strcpy(filestr2+file2pos+1, de->d_name); - fd2 = open(filestr2, O_RDONLY); - status = fstat(fd2, &fdstat); - printf("@%8d:%8d:", (int)de->d_ino, (int)fdstat.st_size); - fd2 = close(fd2); -#endif /* DO_DEBUG */ - printf("%s\n", de->d_name); + filestr2[0] = 0; + file2pos = strlen(filestr); + memcpy(filestr2, filestr, file2pos); + filestr2[file2pos] = '/'; + strcpy(filestr2 + file2pos + 1, de->d_name); + fd2 = open(filestr2, O_RDONLY); + status = fstat(fd2, &fdstat); + printf("@%8d:%8d:", (int)de->d_ino, (int)fdstat.st_size); + fd2 = close(fd2); +#endif /* DO_DEBUG */ + printf("%s\n", de->d_name); #ifdef DO_DEBUG // inchar = fgetc(stdin); -#endif /* DO_DEBUG */ - de = readdir(d); - } - closedir(d); - } else if (S_ISREG(fdstat.st_mode)) { - ROSH_DEBUG("PATH '%s' is a regular file\n", ifilstr); - printf("%8d:%s\n", (int)fdstat.st_size, ifilstr); - } else { - ROSH_DEBUG("PATH '%s' is some other file\n", ifilstr); - printf(" :%s\n", ifilstr); - } +#endif /* DO_DEBUG */ + de = readdir(d); + } + closedir(d); + } else if (S_ISREG(fdstat.st_mode)) { + ROSH_DEBUG("PATH '%s' is a regular file\n", ifilstr); + printf("%8d:%s\n", (int)fdstat.st_size, ifilstr); } else { + ROSH_DEBUG("PATH '%s' is some other file\n", ifilstr); + printf(" :%s\n", ifilstr); + } + } else { #ifdef __COM32__ - if (filestr[strlen(filestr)-1] == SEP) { - /* Directory */ - filepos = 0; - d = opendir(filestr); - if (d != NULL) { -printf("DIR:'%s' %8d %8d\n", d->dd_name, d->dd_fd, d->dd_sect); - de = readdir(d); - while (de != NULL) { - filepos++; + if (filestr[strlen(filestr) - 1] == SEP) { + /* Directory */ + filepos = 0; + d = opendir(filestr); + if (d != NULL) { + printf("DIR:'%s' %8d %8d\n", d->dd_name, d->dd_fd, + d->dd_sect); + de = readdir(d); + while (de != NULL) { + filepos++; #ifdef DO_DEBUG // if (strlen(de->d_name) > 25) de->d_name[25] = 0; - switch (de->d_mode) { - case 16 : ty = 'D'; break; - case 32 : ty = 'F'; break; - default : ty = '*'; - } - printf("@%8d:%8d:%4d ", (int)de->d_ino, (int)de->d_size, de->d_mode); -#endif /* DO_DEBUG */ -// printf("%s\n", de->d_name); -printf("'%s'\n", de->d_name); + switch (de->d_mode) { + case 16: + ty = 'D'; + break; + case 32: + ty = 'F'; + break; + default: + ty = '*'; + } + printf("@%8d:%8d:%4d ", (int)de->d_ino, (int)de->d_size, + de->d_mode); +#endif /* DO_DEBUG */ +// printf("%s\n", de->d_name); + printf("'%s'\n", de->d_name); #ifdef DO_DEBUG // inchar = fgetc(stdin); // fgets(instr, ROSH_CMD_SZ, stdin); -#endif /* DO_DEBUG */ - free(de); - de = readdir(d); -// if(filepos>15){ de = NULL; printf("Force Break\n");} - } -printf("Dir.dd_fd: '%8d'\n", d->dd_fd); - closedir(d); - } else { - rosh_error(0, "dir:NULL", filestr); - } - } else { - rosh_error(errno, "dir_c32", filestr); +#endif /* DO_DEBUG */ + free(de); + de = readdir(d); +// if(filepos>15){ de = NULL; printf("Force Break\n");} } -#else - rosh_error(errno, "dir", filestr); -#endif /* __COM32__ */ + printf("Dir.dd_fd: '%8d'\n", d->dd_fd); + closedir(d); + } else { + rosh_error(0, "dir:NULL", filestr); + } + } else { + rosh_error(errno, "dir_c32", filestr); } -} /* rosh_dir_arg */ +#else + rosh_error(errno, "dir", filestr); +#endif /* __COM32__ */ + } +} /* rosh_dir_arg */ /* Simple directory listing based on cmdstr and pwdstr * cmdstr command string to process @@ -461,24 +478,24 @@ printf("Dir.dd_fd: '%8d'\n", d->dd_fd); */ void rosh_dir(const char *cmdstr, const char *pwdstr) { - char filestr[ROSH_PATH_SZ + 1]; - int cmdpos; /* Position within cmdstr */ - - ROSH_DEBUG("CMD: '%s'\npwd: '%s'\n", cmdstr, pwdstr); - /* Initialization */ - filestr[0] = 0; - cmdpos = 0; - /* skip the first word */ + char filestr[ROSH_PATH_SZ + 1]; + int cmdpos; /* Position within cmdstr */ + + ROSH_DEBUG("CMD: '%s'\npwd: '%s'\n", cmdstr, pwdstr); + /* Initialization */ + filestr[0] = 0; + cmdpos = 0; + /* skip the first word */ + cmdpos = rosh_parse_sp_1(filestr, cmdstr, cmdpos); + cmdpos = rosh_parse_sp_1(filestr, cmdstr, cmdpos); + /* If there are no real arguments, substitute PWD */ + if (strlen(filestr) == 0) + strcpy(filestr, pwdstr); + while (strlen(filestr) > 0) { + rosh_dir_arg(filestr, pwdstr); cmdpos = rosh_parse_sp_1(filestr, cmdstr, cmdpos); - cmdpos = rosh_parse_sp_1(filestr, cmdstr, cmdpos); - /* If there are no real arguments, substitute PWD */ - if (strlen(filestr) == 0) - strcpy(filestr, pwdstr); - while (strlen(filestr) > 0) { - rosh_dir_arg(filestr, pwdstr); - cmdpos = rosh_parse_sp_1(filestr, cmdstr, cmdpos); - } -} /* rosh_dir */ + } +} /* rosh_dir */ /* List Directory; Calls rosh_dir() for now. * cmdstr command string to process @@ -486,98 +503,102 @@ void rosh_dir(const char *cmdstr, const char *pwdstr) */ void rosh_ls(const char *cmdstr, const char *pwdstr) { - printf(" ls implemented as dir (for now)\n"); - rosh_dir(cmdstr, pwdstr); -} /* rosh_ls */ + printf(" ls implemented as dir (for now)\n"); + rosh_dir(cmdstr, pwdstr); +} /* rosh_ls */ /* Page through a buffer string * buf Buffer to page through */ void rosh_more_buf(char *buf, int buflen, int rows, int cols) { - char *bufp, *bufeol; /* Pointer to current and next end-of-line - position in buffer */ - int bufpos, bufcnt; /* current position, count characters */ - char scrbuf[ROSH_SBUF_SZ]; - int inc; - int i, numln; /* Index, Number of lines */ - - bufpos = 0; - bufp = buf + bufpos; - bufeol = bufp; - numln = rows - 1; -printf("--(%d)\n", buflen); + char *bufp, *bufeol; /* Pointer to current and next end-of-line + position in buffer */ + int bufpos, bufcnt; /* current position, count characters */ + char scrbuf[ROSH_SBUF_SZ]; + int inc; + int i, numln; /* Index, Number of lines */ + + bufpos = 0; + bufp = buf + bufpos; + bufeol = bufp; + numln = rows - 1; + printf("--(%d)\n", buflen); // printf("--termIOS CONSTS: "); // printf("ISIG=%08X ", ISIG); // printf("ICANON=%08X ", ICANON); // printf("ECHO=%08X ", ECHO); // printf("=%08X", ); // printf("\n"); - while (bufpos < buflen) { - for (i=0; i 0) { - bufpos += numrd; - numrd = fread(buf+bufpos, 1, \ - ((int)fdstat.st_size - bufpos), f); - } - fclose(f); - rosh_more_buf(buf, bufpos, rows, cols); - } - } else { + struct stat fdstat; + int status; + char *buf; + int bufpos; + int numrd; + FILE *f; + + status = fstat(fd, &fdstat); + if (S_ISREG(fdstat.st_mode)) { + buf = malloc((int)fdstat.st_size); + if (buf != NULL) { + f = fdopen(fd, "r"); + bufpos = 0; + numrd = fread(buf, 1, (int)fdstat.st_size, f); + while (numrd > 0) { + bufpos += numrd; + numrd = fread(buf + bufpos, 1, + ((int)fdstat.st_size - bufpos), f); + } + fclose(f); + rosh_more_buf(buf, bufpos, rows, cols); } + } else { + } -} /* rosh_more_fd */ +} /* rosh_more_fd */ /* Page through a file like the more command * cmdstr command string to process @@ -585,49 +606,49 @@ void rosh_more_fd(int fd, int rows, int cols) * ipwdstr Initial PWD */ void rosh_more(const char *cmdstr, const char *pwdstr) - /*, const char *ipwdstr)*/ + /*, const char *ipwdstr) */ { - int fd; - char filestr[ROSH_PATH_SZ + 1]; - int cmdpos; - int rows, cols; - - ROSH_DEBUG("CMD: '%s'\npwd: '%s'\n", cmdstr, pwdstr); - /* Initialization */ - filestr[0] = 0; - cmdpos = 0; - if (getscreensize(1, &rows, &cols)) { - ROSH_DEBUG("getscreensize() fail; fall back\n"); - ROSH_DEBUG("\tROWS='%d'\tCOLS='%d'\n", rows, cols); - /* If either fail, go under normal size, just in case */ - if (!rows) - rows = 20; - if (!cols) - cols = 75; - } + int fd; + char filestr[ROSH_PATH_SZ + 1]; + int cmdpos; + int rows, cols; + + ROSH_DEBUG("CMD: '%s'\npwd: '%s'\n", cmdstr, pwdstr); + /* Initialization */ + filestr[0] = 0; + cmdpos = 0; + if (getscreensize(1, &rows, &cols)) { + ROSH_DEBUG("getscreensize() fail; fall back\n"); ROSH_DEBUG("\tROWS='%d'\tCOLS='%d'\n", rows, cols); - - /* skip the first word */ - cmdpos = rosh_parse_sp_1(filestr, cmdstr, cmdpos); - cmdpos = rosh_parse_sp_1(filestr, cmdstr, cmdpos); - if (strlen(filestr) > 0) { - /* There is no need to mess up the console if we don't have a - file */ - rosh_console_raw(); - while (strlen(filestr) > 0) { - printf("--File = '%s'\n", filestr); - fd = open(filestr, O_RDONLY); - if (fd != -1) { - rosh_more_fd(fd, rows, cols); - close(fd); - } else { - rosh_error(errno, "more", filestr); - } - cmdpos = rosh_parse_sp_1(filestr, cmdstr, cmdpos); - } - rosh_console_std(); + /* If either fail, go under normal size, just in case */ + if (!rows) + rows = 20; + if (!cols) + cols = 75; + } + ROSH_DEBUG("\tROWS='%d'\tCOLS='%d'\n", rows, cols); + + /* skip the first word */ + cmdpos = rosh_parse_sp_1(filestr, cmdstr, cmdpos); + cmdpos = rosh_parse_sp_1(filestr, cmdstr, cmdpos); + if (strlen(filestr) > 0) { + /* There is no need to mess up the console if we don't have a + file */ + rosh_console_raw(); + while (strlen(filestr) > 0) { + printf("--File = '%s'\n", filestr); + fd = open(filestr, O_RDONLY); + if (fd != -1) { + rosh_more_fd(fd, rows, cols); + close(fd); + } else { + rosh_error(errno, "more", filestr); + } + cmdpos = rosh_parse_sp_1(filestr, cmdstr, cmdpos); } -} /* rosh_more */ + rosh_console_std(); + } +} /* rosh_more */ /* Page a file with rewind * cmdstr command string to process @@ -636,9 +657,9 @@ void rosh_more(const char *cmdstr, const char *pwdstr) */ void rosh_less(const char *cmdstr, const char *pwdstr) { - printf(" less implemented as more (for now)\n"); - rosh_more(cmdstr, pwdstr); -} /* rosh_less */ + printf(" less implemented as more (for now)\n"); + rosh_more(cmdstr, pwdstr); +} /* rosh_less */ /* Show PWD * cmdstr command string to process @@ -646,12 +667,12 @@ void rosh_less(const char *cmdstr, const char *pwdstr) */ void rosh_pwd(const char *cmdstr, const char *pwdstr) { - int istr; - ROSH_DEBUG("CMD: '%s'\npwd: '%s'\n", cmdstr, pwdstr); - printf("%s\n", pwdstr); - istr = htonl(*(int*)pwdstr); - ROSH_DEBUG(" --%08X\n", istr); -} /* rosh_pwd */ + int istr; + ROSH_DEBUG("CMD: '%s'\npwd: '%s'\n", cmdstr, pwdstr); + printf("%s\n", pwdstr); + istr = htonl(*(int *)pwdstr); + ROSH_DEBUG(" --%08X\n", istr); +} /* rosh_pwd */ /* Run a boot string, calling syslinux_run_command * cmdstr command string to process @@ -660,32 +681,32 @@ void rosh_pwd(const char *cmdstr, const char *pwdstr) */ void rosh_run(const char *cmdstr, const char *pwdstr, const char *ipwdstr) { - int cmdpos; - char *cmdptr; - char istr[ROSH_CMD_SZ]; /* input command string */ - - cmdpos = 0; - ROSH_DEBUG("CMD: '%s'\npwd: '%s'\n", cmdstr, pwdstr); - /* skip the first word */ - cmdpos = rosh_search_sp(cmdstr, cmdpos); - /* skip spaces */ - cmdpos = rosh_search_nonsp(cmdstr, cmdpos); - cmdptr = (char *)(cmdstr + cmdpos); - printf("--run: '%s'\n", cmdptr); - /* //HERE--Reparse if pwdstr != ipwdstr; seems a little daunting as - detecting params vs filenames is difficult/impossible */ - if (strcmp(pwdstr, ipwdstr) != 0) { - /* For now, just prompt for verification */ - printf(" from directory '%s'? (y/N):", pwdstr); - fgets(istr, ROSH_CMD_SZ, stdin); - if ((istr[0] != 'y') && (istr[0] != 'Y')) { - printf("Aborting run\n"); - return; - } - printf("Run anyways\n"); + int cmdpos; + char *cmdptr; + char istr[ROSH_CMD_SZ]; /* input command string */ + + cmdpos = 0; + ROSH_DEBUG("CMD: '%s'\npwd: '%s'\n", cmdstr, pwdstr); + /* skip the first word */ + cmdpos = rosh_search_sp(cmdstr, cmdpos); + /* skip spaces */ + cmdpos = rosh_search_nonsp(cmdstr, cmdpos); + cmdptr = (char *)(cmdstr + cmdpos); + printf("--run: '%s'\n", cmdptr); + /* //HERE--Reparse if pwdstr != ipwdstr; seems a little daunting as + detecting params vs filenames is difficult/impossible */ + if (strcmp(pwdstr, ipwdstr) != 0) { + /* For now, just prompt for verification */ + printf(" from directory '%s'? (y/N):", pwdstr); + fgets(istr, ROSH_CMD_SZ, stdin); + if ((istr[0] != 'y') && (istr[0] != 'Y')) { + printf("Aborting run\n"); + return; } - syslinux_run_command(cmdptr); -} /* rosh_run */ + printf("Run anyways\n"); + } + syslinux_run_command(cmdptr); +} /* rosh_run */ /* Process a single command string and call handling function * cmdstr command string to process @@ -695,58 +716,95 @@ void rosh_run(const char *cmdstr, const char *pwdstr, const char *ipwdstr) */ char rosh_command(const char *cmdstr, char *pwdstr, const char *ipwdstr) { - char do_exit; - do_exit = false; - ROSH_DEBUG("--cmd:'%s'\n", cmdstr); - switch (cmdstr[0]) { - case 'e': case 'E': case 'q': case 'Q': - do_exit = true; break; - case 'c': case 'C': /* run 'cd' 'cat' 'cfg' */ - switch (cmdstr[1]) { - case 'a': case 'A': - rosh_cat(cmdstr, pwdstr); break; - case 'd': case 'D': - rosh_cd(cmdstr, pwdstr, ipwdstr); break; - case 'f': case 'F': - rosh_cfg(cmdstr, pwdstr); break; - default: rosh_help(1); - } - break; - case 'd': case 'D': /* run 'dir' */ - rosh_dir(cmdstr, pwdstr); break; - case 'h': case 'H': case '?': rosh_help(2); - break; - case 'l': case 'L': /* run 'ls' 'less' */ - switch (cmdstr[1]) { - case 0: case 's': case 'S': - rosh_ls(cmdstr, pwdstr); break; - case 'e': case 'E': - rosh_less(cmdstr, pwdstr); break; - default: rosh_help(1); - } - break; - case 'm': case 'M': - switch (cmdstr[1]) { - case 'a': case 'A': - rosh_help(2); - break; - case 'o': case 'O': - rosh_more(cmdstr, pwdstr); - break; - default: rosh_help(1); - } - break; - case 'p': case 'P': /* run 'pwd' */ - rosh_pwd(cmdstr, pwdstr); break; - case 'r': case 'R': /* run 'run' */ - rosh_run(cmdstr, pwdstr, ipwdstr); break; - case 'v': case 'V': - rosh_version(); break; - case 0: case '\n': break; - default : rosh_help(1); - } /* switch(cmdstr[0]) */ - return do_exit; -} /* rosh_command */ + char do_exit; + do_exit = false; + ROSH_DEBUG("--cmd:'%s'\n", cmdstr); + switch (cmdstr[0]) { + case 'e': + case 'E': + case 'q': + case 'Q': + do_exit = true; + break; + case 'c': + case 'C': /* run 'cd' 'cat' 'cfg' */ + switch (cmdstr[1]) { + case 'a': + case 'A': + rosh_cat(cmdstr, pwdstr); + break; + case 'd': + case 'D': + rosh_cd(cmdstr, pwdstr, ipwdstr); + break; + case 'f': + case 'F': + rosh_cfg(cmdstr, pwdstr); + break; + default: + rosh_help(1); + } + break; + case 'd': + case 'D': /* run 'dir' */ + rosh_dir(cmdstr, pwdstr); + break; + case 'h': + case 'H': + case '?': + rosh_help(2); + break; + case 'l': + case 'L': /* run 'ls' 'less' */ + switch (cmdstr[1]) { + case 0: + case 's': + case 'S': + rosh_ls(cmdstr, pwdstr); + break; + case 'e': + case 'E': + rosh_less(cmdstr, pwdstr); + break; + default: + rosh_help(1); + } + break; + case 'm': + case 'M': + switch (cmdstr[1]) { + case 'a': + case 'A': + rosh_help(2); + break; + case 'o': + case 'O': + rosh_more(cmdstr, pwdstr); + break; + default: + rosh_help(1); + } + break; + case 'p': + case 'P': /* run 'pwd' */ + rosh_pwd(cmdstr, pwdstr); + break; + case 'r': + case 'R': /* run 'run' */ + rosh_run(cmdstr, pwdstr, ipwdstr); + break; + case 'v': + case 'V': + rosh_version(); + break; + case 0: + case '\n': + break; + default: + rosh_help(1); + } /* switch(cmdstr[0]) */ + return do_exit; +} /* rosh_command */ /* Process the prompt for commands as read from stdin and call rosh_command * to process command line string @@ -755,56 +813,56 @@ char rosh_command(const char *cmdstr, char *pwdstr, const char *ipwdstr) */ int rosh_prompt(const char *icmdstr) { - int rv; - char cmdstr[ROSH_CMD_SZ]; - char pwdstr[ROSH_PATH_SZ + 1], ipwdstr[ROSH_PATH_SZ + 1]; + int rv; + char cmdstr[ROSH_CMD_SZ]; + char pwdstr[ROSH_PATH_SZ + 1], ipwdstr[ROSH_PATH_SZ + 1]; /* int numchar; -*/ char do_exit; - char *c; - - rv = 0; - do_exit = false; - strcpy(pwdstr, "/"); - getcwd(pwdstr, ROSH_PATH_SZ + 1); - strcpy(ipwdstr, pwdstr); /* Retain the original PWD */ - if (icmdstr[0] != '\0') - do_exit = rosh_command(icmdstr, pwdstr, ipwdstr); - while (!(do_exit)) { - console_ansi_std(); - printf("\nrosh: "); - /* Read a line from console */ - fgets(cmdstr, ROSH_CMD_SZ, stdin); - /* remove newline from input string */ - c = strchr(cmdstr, '\n'); - *c = 0; - do_exit = rosh_command(cmdstr, pwdstr, ipwdstr); - } - if (strcmp(pwdstr, ipwdstr) != 0) { - /* Change directory to the original directory */ - strcpy(cmdstr, "cd "); - strcpy(cmdstr + 3, ipwdstr); - rosh_cd(cmdstr, pwdstr, ipwdstr); - } - return rv; +*/ char do_exit; + char *c; + + rv = 0; + do_exit = false; + strcpy(pwdstr, "/"); + getcwd(pwdstr, ROSH_PATH_SZ + 1); + strcpy(ipwdstr, pwdstr); /* Retain the original PWD */ + if (icmdstr[0] != '\0') + do_exit = rosh_command(icmdstr, pwdstr, ipwdstr); + while (!(do_exit)) { + console_ansi_std(); + printf("\nrosh: "); + /* Read a line from console */ + fgets(cmdstr, ROSH_CMD_SZ, stdin); + /* remove newline from input string */ + c = strchr(cmdstr, '\n'); + *c = 0; + do_exit = rosh_command(cmdstr, pwdstr, ipwdstr); + } + if (strcmp(pwdstr, ipwdstr) != 0) { + /* Change directory to the original directory */ + strcpy(cmdstr, "cd "); + strcpy(cmdstr + 3, ipwdstr); + rosh_cd(cmdstr, pwdstr, ipwdstr); + } + return rv; } int main(int argc, char *argv[]) { - int rv; - char cmdstr[ROSH_CMD_SZ]; - - /* Initialization */ - rv = 0; - console_ansi_std(); -// console_ansi_raw(); - if (argc != 1) { - rv = rosh_argcat(cmdstr, argc, argv, 1); - } else { - rosh_version(); - cmdstr[0] = '\0'; - } - rv = rosh_prompt(cmdstr); - printf("--Exiting '%s'\n", APP_NAME); - console_ansi_std(); - return rv; + int rv; + char cmdstr[ROSH_CMD_SZ]; + + /* Initialization */ + rv = 0; + console_ansi_std(); +// console_ansi_raw(); + if (argc != 1) { + rv = rosh_argcat(cmdstr, argc, argv, 1); + } else { + rosh_version(); + cmdstr[0] = '\0'; + } + rv = rosh_prompt(cmdstr); + printf("--Exiting '%s'\n", APP_NAME); + console_ansi_std(); + return rv; } -- 2.7.4