sysctl: avoid stat() on every item if in -w mode
function old new delta sysctl_act_recursive 163 167 +4 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
317498f3b3
commit
679c30e73e
@ -205,19 +205,21 @@ static int sysctl_act_on_setting(char *setting)
|
|||||||
|
|
||||||
static int sysctl_act_recursive(const char *path)
|
static int sysctl_act_recursive(const char *path)
|
||||||
{
|
{
|
||||||
DIR *dirp;
|
|
||||||
struct stat buf;
|
struct stat buf;
|
||||||
struct dirent *entry;
|
|
||||||
char *next;
|
|
||||||
int retval = 0;
|
int retval = 0;
|
||||||
|
|
||||||
stat(path, &buf);
|
if (!(option_mask32 & FLAG_WRITE)
|
||||||
if (S_ISDIR(buf.st_mode) && !(option_mask32 & FLAG_WRITE)) {
|
&& stat(path, &buf) == 0
|
||||||
|
&& S_ISDIR(buf.st_mode)
|
||||||
|
) {
|
||||||
|
struct dirent *entry;
|
||||||
|
DIR *dirp;
|
||||||
|
|
||||||
dirp = opendir(path);
|
dirp = opendir(path);
|
||||||
if (dirp == NULL)
|
if (dirp == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
while ((entry = readdir(dirp)) != NULL) {
|
while ((entry = readdir(dirp)) != NULL) {
|
||||||
next = concat_subpath_file(path, entry->d_name);
|
char *next = concat_subpath_file(path, entry->d_name);
|
||||||
if (next == NULL)
|
if (next == NULL)
|
||||||
continue; /* d_name is "." or ".." */
|
continue; /* d_name is "." or ".." */
|
||||||
/* if path was ".", drop "./" prefix: */
|
/* if path was ".", drop "./" prefix: */
|
||||||
@ -305,6 +307,8 @@ int sysctl_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
return sysctl_act_recursive(".");
|
return sysctl_act_recursive(".");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//TODO: if(!argv[0]) bb_show_usage() ?
|
||||||
|
|
||||||
retval = 0;
|
retval = 0;
|
||||||
while (*argv) {
|
while (*argv) {
|
||||||
sysctl_dots_to_slashes(*argv);
|
sysctl_dots_to_slashes(*argv);
|
||||||
|
Loading…
Reference in New Issue
Block a user