]> www.infradead.org Git - mtd-utils.git/commitdiff
fs-tests: integck: teach symlink_new to return error on creation failure
authorArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
Mon, 18 Apr 2011 10:38:17 +0000 (13:38 +0300)
committerArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
Fri, 22 Apr 2011 11:29:52 +0000 (14:29 +0300)
Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
tests/fs-tests/integrity/integck.c

index e69d4c446afc75d14275c91d02edf8120499f2bd..fbf24fb704072c20197d82576627dbb70cdc7cfd 100644 (file)
@@ -1806,21 +1806,31 @@ static char *pick_symlink_target(const char *symlink_path)
        return rel_path;
 }
 
-static void symlink_new(struct dir_info *dir, const char *name_)
+static int symlink_new(struct dir_info *dir, const char *nm)
 {
        struct symlink_info *s;
-       char *path, *target, *name = dup_string(name_);
+       char *path, *target, *name = dup_string(nm);
 
+       /*
+        * Note, we need to duplicate the input 'name' string because of the
+        * shared random_name_buf.
+        */
        path = dir_path(dir, name);
        target = pick_symlink_target(path);
        if (symlink(target, path) != 0) {
-               CHECK(errno == ENOSPC || errno == ENAMETOOLONG);
+               int ret = 0;
+
                if (errno == ENOSPC)
                        full = 1;
+               else if (errno != ENAMETOOLONG) {
+                       pcv("cannot create symlink %s in directory %s to file %s",
+                           path, dir->name, target);
+                       ret = -1;
+               }
                free(target);
-               free(path);
                free(name);
-               return;
+               free(path);
+               return ret;
        }
        free(path);
 
@@ -1828,6 +1838,7 @@ static void symlink_new(struct dir_info *dir, const char *name_)
        add_dir_entry(dir, 's', name, s);
        s->target_pathname = target;
        free(name);
+       return 0;
 }
 
 static void symlink_remove(struct symlink_info *symlink)
@@ -1944,7 +1955,7 @@ static int operate_on_dir(struct dir_info *dir)
                link_new(dir, make_name(dir), file);
        else if (r == 3 && grow && random_no(5) == 0)
                /* When growing, 1 time in 70 create a symbolic link */
-               symlink_new(dir, make_name(dir));
+               return symlink_new(dir, make_name(dir));
        else {
                /* Otherwise randomly select an entry to operate on */
                r = random_no(dir->number_of_entries);