diff options
author | Eric Andersen | 2005-07-18 23:51:27 +0000 |
---|---|---|
committer | Eric Andersen | 2005-07-18 23:51:27 +0000 |
commit | 164a716f964bba247c660bc70149234f95146871 (patch) | |
tree | 95a8a6f75cb2ed1bb07cb6019088db7348ebf4d4 /busybox/miscutils | |
parent | 8c59a0bf0e9e2d87b0ff273ea3f0bf05bbbf6373 (diff) | |
download | busybox-164a716f964bba247c660bc70149234f95146871.zip busybox-164a716f964bba247c660bc70149234f95146871.tar.gz |
busybox-1.0.1-rc1.patch
http://busybox.net/lists/busybox/2005-July/014974.html
Diffstat (limited to 'busybox/miscutils')
-rw-r--r-- | busybox/miscutils/Config.in | 3 | ||||
-rw-r--r-- | busybox/miscutils/devfsd.c | 59 | ||||
-rw-r--r-- | busybox/miscutils/strings.c | 125 |
3 files changed, 84 insertions, 103 deletions
diff --git a/busybox/miscutils/Config.in b/busybox/miscutils/Config.in index 77e13e8..767b9c4 100644 --- a/busybox/miscutils/Config.in +++ b/busybox/miscutils/Config.in @@ -37,6 +37,7 @@ config CONFIG_FEATURE_CROND_CALL_SENDMAIL config CONFIG_CRONTAB bool "crontab" default n + select CONFIG_FEATURE_SUID help Crontab manipulates the crontab for a particular user. Only the superuser may specify a different user and/or crontab directory. @@ -86,7 +87,7 @@ config CONFIG_DEVFSD_VERBOSE config CONFIG_LAST bool "last" default n - select CONFIG_FEATURE_U_W_TMP + select CONFIG_FEATURE_WTMP help 'last' displays a list of the last users that logged into the system. diff --git a/busybox/miscutils/devfsd.c b/busybox/miscutils/devfsd.c index 5e183e6..34945c7 100644 --- a/busybox/miscutils/devfsd.c +++ b/busybox/miscutils/devfsd.c @@ -566,40 +566,36 @@ static void read_config_file (char *path, int optional, unsigned long *event_mas #ifdef CONFIG_DEBUG msg_logger( NO_DIE, LOG_INFO, "read_config_file(): %s\n", path); #endif - if (stat (path, &statbuf) != 0 || statbuf.st_size == 0 ) - goto read_config_file_err; - - if ( S_ISDIR (statbuf.st_mode) ) - { - /* strip last / from dirname so we don't need to check for it later */ - while( path && path[1]!='\0' && path[strlen(path)-1] == '/') - path[strlen(path) -1] = '\0'; - - dir_operation(READ_CONFIG, path, 0, event_mask); - return; - } - - if ( ( fp = fopen (path, "r") ) != NULL ) + if (stat (path, &statbuf) == 0 ) { - while (fgets (buf, STRING_LENGTH, fp) != NULL) + /* Don't read 0 length files: ignored */ + /*if( statbuf.st_size == 0 ) + return;*/ + if ( S_ISDIR (statbuf.st_mode) ) { - /* GETS(3) Linux Programmer's Manual - fgets() reads in at most one less than size characters from stream and - stores them into the buffer pointed to by s. Reading stops after an - EOF or a newline. If a newline is read, it is stored into the buffer. - A '\0' is stored after the last character in the buffer. - */ - /*buf[strlen (buf) - 1] = '\0';*/ - /* Skip whitespace */ - for (line = buf; isspace (*line); ++line) - /*VOID*/; - if (line[0] == '\0' || line[0] == '#' ) - continue; - process_config_line (line, event_mask); + /* strip last / from dirname so we don't need to check for it later */ + while( path && path[1]!='\0' && path[strlen(path)-1] == '/') + path[strlen(path) -1] = '\0'; + + dir_operation(READ_CONFIG, path, 0, event_mask); + return; } - fclose (fp); - errno=0; - } + if ( ( fp = fopen (path, "r") ) != NULL ) + { + while (fgets (buf, STRING_LENGTH, fp) != NULL) + { + /* Skip whitespace */ + for (line = buf; isspace (*line); ++line) + /*VOID*/; + if (line[0] == '\0' || line[0] == '#' ) + continue; + process_config_line (line, event_mask); + } + fclose (fp); + } else { + goto read_config_file_err; + } + } else { read_config_file_err: #ifdef CONFIG_DEVFSD_VERBOSE msg_logger(((optional == 0 ) && (errno == ENOENT))? DIE : NO_DIE, LOG_ERR, "read config file: %s: %m\n", path); @@ -607,6 +603,7 @@ read_config_file_err: if(optional == 0 && errno == ENOENT) exit(EXIT_FAILURE); #endif + } return; } /* End Function read_config_file */ diff --git a/busybox/miscutils/strings.c b/busybox/miscutils/strings.c index 92e9f0d..d0a0924 100644 --- a/busybox/miscutils/strings.c +++ b/busybox/miscutils/strings.c @@ -27,99 +27,82 @@ #include <stdio.h> #include <stdlib.h> -#include <string.h> #include <getopt.h> -#include <unistd.h> #include <ctype.h> #include "busybox.h" #define ISSTR(ch) (isprint(ch) || ch == '\t') +#define WHOLE_FILE 1 +#define PRINT_NAME 2 +#define PRINT_OFFSET 4 +#define SIZE 8 + int strings_main(int argc, char **argv) { - int n=4, c, i, opt=0, status=EXIT_SUCCESS; - long t=0, count; + int n, c, i = 0, status = EXIT_SUCCESS; + unsigned long opt; + unsigned long count; FILE *file = stdin; - char *string=NULL; - const char *fmt="%s: "; - - while ((i = getopt(argc, argv, "afon:")) > 0) - switch(i) - { - case 'a': - break; - case 'f': - opt+=1; - break; - case 'o': - opt+=2; - break; - case 'n': - n = bb_xgetlarg(optarg, 10, 1, INT_MAX); - break; - default: - bb_show_usage(); - } - + char *string; + const char *fmt = "%s: "; + char *n_arg = "4"; + + opt = bb_getopt_ulflags (argc, argv, "afon:", &n_arg); + /* -a is our default behaviour */ + argc -= optind; argv += optind; - i=0; - - string=xmalloc(n+1); - string[n]='\0'; - n-=1; - - if(argc==0) - { - fmt="{%s}: "; - *argv=(char *)bb_msg_standard_input; - goto pipe; + n = bb_xgetlarg(n_arg, 10, 1, INT_MAX); + string = xcalloc(n + 1, 1); + n--; + + if ( argc == 0) { + fmt = "{%s}: "; + *argv = (char *)bb_msg_standard_input; + goto PIPE; } - - for( ;*argv!=NULL && argc>0;argv++) - { - if((file=bb_wfopen(*argv,"r"))) - { -pipe: - - count=0; - do{ - c=fgetc(file); - if(ISSTR(c)) - { - if(i==0) - t=count; - if(i<=n) + + do { + if ((file = bb_wfopen(*argv, "r"))) { +PIPE: + count = 0; + do { + c = fgetc(file); + if (ISSTR(c)) { + if (i <= n) { string[i]=c; - if(i==n) - { - if(opt == 1 || opt == 3 ) - printf(fmt,*argv); - if(opt >= 2 ) - printf("%7lo ", t); + } else { + putchar(c); + } + if (i == n) { + if (opt & PRINT_NAME) { + printf(fmt, *argv); + } + if (opt & PRINT_OFFSET) { + printf("%7lo ", count - n ); + } printf("%s", string); } - if(i>n) - putchar(c); i++; - } - else - { - if(i>n) + } else { + if (i > n) { putchar('\n'); - i=0; + } + i = 0; } count++; - }while(c!=EOF); - + } while (c != EOF); bb_fclose_nonstdin(file); - } - else + } else { status=EXIT_FAILURE; - } - /*free(string);*/ - exit(status); + } + } while ( --argc > 0 ); +#ifdef CONFIG_FEATURE_CLEAN_UP + free(string); +#endif + bb_fflush_stdout_and_exit(status); } /* |