Merge "android/perms.c: clean up error handling" am: 26ab9ecf59 am: afa0fe5265
am: 377e6bf4d3
Change-Id: Idd12382684742c7ec5d2259da4bc39fd7d5831b1
diff --git a/contrib/android/perms.c b/contrib/android/perms.c
index 746b94b..3c42e59 100644
--- a/contrib/android/perms.c
+++ b/contrib/android/perms.c
@@ -25,6 +25,7 @@
time_t fixed_time;
const struct ugid_map* uid_map;
const struct ugid_map* gid_map;
+ errcode_t error;
};
static errcode_t ino_add_xattr(ext2_filsys fs, ext2_ino_t ino, const char *name,
@@ -82,7 +83,7 @@
if (retval < 0) {
com_err(__func__, retval,
_("searching for label \"%s\""), params->filename);
- exit(1);
+ return retval;
}
retval = ino_add_xattr(fs, ino, "security." XATTR_SELINUX_SUFFIX,
@@ -249,8 +250,10 @@
return 0;
if (asprintf(¶ms->filename, "%s/%.*s", params->path, name_len,
- de->name) < 0)
+ de->name) < 0) {
+ params->error = ENOMEM;
return -ENOMEM;
+ }
if (!strncmp(de->name, "lost+found", 10)) {
retval = set_selinux_xattr(params->fs, de->inode, params);
@@ -264,8 +267,10 @@
char *cur_path = params->path;
char *cur_filename = params->filename;
params->path = params->filename;
- ext2fs_dir_iterate2(params->fs, de->inode, 0, NULL,
- walk_dir, params);
+ retval = ext2fs_dir_iterate2(params->fs, de->inode, 0, NULL,
+ walk_dir, params);
+ if (retval)
+ goto end;
params->path = cur_path;
params->filename = cur_filename;
}
@@ -273,6 +278,7 @@
end:
free(params->filename);
+ params->error |= retval;
return retval;
}
@@ -298,6 +304,7 @@
.mountpoint = mountpoint,
.uid_map = uid_map,
.gid_map = gid_map,
+ .error = 0
};
/* walk_dir will add the "/". Don't add it twice. */
@@ -308,8 +315,11 @@
if (retval)
return retval;
- return ext2fs_dir_iterate2(fs, EXT2_ROOT_INO, 0, NULL, walk_dir,
- ¶ms);
+ retval = ext2fs_dir_iterate2(fs, EXT2_ROOT_INO, 0, NULL, walk_dir,
+ ¶ms);
+ if (retval)
+ return retval;
+ return params.error;
}
errcode_t android_configure_fs(ext2_filsys fs, char *src_dir, char *target_out,