use asprintf in place of malloc/sprintf as suggested by solar
authorMike Frysinger <vapier@gentoo.org>
Mon, 25 Apr 2005 05:24:35 +0000 (05:24 -0000)
committerMike Frysinger <vapier@gentoo.org>
Mon, 25 Apr 2005 05:24:35 +0000 (05:24 -0000)
e2fsprogs/chattr.c
e2fsprogs/lsattr.c

index 5aaa14fbb14a4a2f6ab1a313ca18eb1587b521ea..07cee8f7cfdd9bf4d02b34cbc632bcf2bdf1c9a4 100644 (file)
@@ -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);
        }
index be5723c438938bd18da51b7cf586af52f0a4ab86..d3896637db86358020f9e48d225a8a8c6086baf7 100644 (file)
@@ -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;
 }