diff options
-rw-r--r-- | selinux/setfiles.c | 19 |
1 files changed, 5 insertions, 14 deletions
diff --git a/selinux/setfiles.c b/selinux/setfiles.c index 352c0f224..df77d6053 100644 --- a/selinux/setfiles.c +++ b/selinux/setfiles.c @@ -264,28 +264,21 @@ static bool only_changed_user(const char *a, const char *b) static int restore(const char *file) { - char *my_file = xstrdup(file); - char *my_file_orig = my_file; + char *my_file; struct stat my_sb; int i, j, ret; char *context = NULL; char *newcon = NULL; bool user_only_changed = 0; - size_t len = strlen(my_file); int retval = 0; - - /* Skip the extra slashes at the beginning and end, if present. */ - if (file[0] == '/' && file[1] == '/') - my_file++; - if (len > 1 && my_file[len - 1] == '/') - my_file[len - 1] = '\0'; + + my_file = bb_simplify_path(file); i = match(my_file, &my_sb, &newcon); if (i < 0) /* No matching specification. */ goto out; - if (FLAG_p_progress) { count++; if (count % 0x400 == 0) { /* every 1024 times */ @@ -386,7 +379,7 @@ static int restore(const char *file) out: freecon(context); freecon(newcon); - free(my_file_orig); + free(my_file); return retval; err: retval--; /* -1 */ @@ -499,7 +492,6 @@ int setfiles_main(int argc, char **argv) struct stat sb; int rc, i = 0; const char *input_filename = NULL; - int use_input_file = 0; char *buf = NULL; size_t buf_len; int flags; @@ -591,7 +583,6 @@ int setfiles_main(int argc, char **argv) rootpathlen = strlen(rootpath); } if (flags & OPT_s) { - use_input_file = 1; input_filename = "-"; add_assoc = 0; } @@ -621,7 +612,7 @@ int setfiles_main(int argc, char **argv) exit(1); } - if (use_input_file) { + if (input_filename) { ssize_t len; FILE *f = stdin; |