summaryrefslogtreecommitdiff
path: root/busybox/miscutils
diff options
context:
space:
mode:
authorEric Andersen2005-07-18 23:51:27 +0000
committerEric Andersen2005-07-18 23:51:27 +0000
commit164a716f964bba247c660bc70149234f95146871 (patch)
tree95a8a6f75cb2ed1bb07cb6019088db7348ebf4d4 /busybox/miscutils
parent8c59a0bf0e9e2d87b0ff273ea3f0bf05bbbf6373 (diff)
downloadbusybox-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.in3
-rw-r--r--busybox/miscutils/devfsd.c59
-rw-r--r--busybox/miscutils/strings.c125
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);
}
/*