From c238a97a9e90734da15163ba54d6862bb8e360e9 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Mon, 25 Apr 2005 05:24:35 +0000 Subject: [PATCH] use asprintf in place of malloc/sprintf as suggested by solar --- e2fsprogs/chattr.c | 8 +++----- e2fsprogs/lsattr.c | 18 ++++++++++-------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/e2fsprogs/chattr.c b/e2fsprogs/chattr.c index 5aaa14fbb..07cee8f7c 100644 --- a/e2fsprogs/chattr.c +++ b/e2fsprogs/chattr.c @@ -167,11 +167,9 @@ static int chattr_dir_proc(const char *dir_name, struct dirent *de, /*if (strcmp(de->d_name, ".") && strcmp(de->d_name, "..")) {*/ if (de->d_name[0] == '.' && (de->d_name[1] == '\0' || \ (de->d_name[1] == '.' && de->d_name[2] == '\0'))) { - - char *path = malloc(strlen(dir_name) + 1 + strlen(de->d_name) + 1); - if (!path) - bb_error_msg_and_die("Couldn't allocate path variable in chattr_dir_proc"); - sprintf(path, "%s/%s", dir_name, de->d_name); + char *path; + if (asprintf(&path, "%s/%s", dir_name, de->d_name) == -1) + bb_error_msg_and_die("asprintf failed"); change_attributes(path); free(path); } diff --git a/e2fsprogs/lsattr.c b/e2fsprogs/lsattr.c index be5723c43..d3896637d 100644 --- a/e2fsprogs/lsattr.c +++ b/e2fsprogs/lsattr.c @@ -101,29 +101,31 @@ static int lsattr_dir_proc(const char *dir_name, struct dirent *de, { STRUCT_STAT st; char *path; - int dir_len = strlen(dir_name); + int i = strlen(dir_name); - path = malloc(dir_len + strlen(de->d_name) + 2); - - if (dir_len && dir_name[dir_len-1] == '/') - sprintf(path, "%s%s", dir_name, de->d_name); + if (i && dir_name[i-1] == '/') + i = asprintf(&path, "%s%s", dir_name, de->d_name); else - sprintf(path, "%s/%s", dir_name, de->d_name); + i = asprintf(&path, "%s/%s", dir_name, de->d_name); + if (i == -1) + bb_perror_msg_and_die("asprintf failed"); + if (LSTAT(path, &st) == -1) bb_perror_msg(path); else { if (de->d_name[0] != '.' || (flags & OPT_ALL)) { list_attributes(path); if (S_ISDIR(st.st_mode) && (flags & OPT_RECUR) && - strcmp(de->d_name, ".") && - strcmp(de->d_name, "..")) { + strcmp(de->d_name, ".") && strcmp(de->d_name, "..")) { printf("\n%s:\n", path); iterate_on_dir(path, lsattr_dir_proc, NULL); printf("\n"); } } } + free(path); + return 0; }