# HG changeset patch # User Paul Boddie # Date 1646348870 -3600 # Node ID 01efe5404c4ba3ec49f411e562ecaeb834e3f988 # Parent 65f27efbb208271529415991cb00e8d2959fa53c Moved common code into a separate function. diff -r 65f27efbb208 -r 01efe5404c4b libe2access/host/e2access.c --- a/libe2access/host/e2access.c Thu Mar 03 23:59:16 2022 +0100 +++ b/libe2access/host/e2access.c Fri Mar 04 00:07:50 2022 +0100 @@ -206,6 +206,39 @@ +/* Make a new object using the given function. */ + +static int _make_object(ext2_filsys fs, const char *filename, + ext2_ino_t ino_parent, const char *basename, + ext2_ino_t *ino_target, + errcode_t (*fn)(ext2_filsys, ext2_ino_t, const char *, + __u16, __u16, __u16, ext2_ino_t *)) +{ + errcode_t retval; + struct stat st; + + /* Obtain the metadata. */ + + if (lstat(filename, &st)) + { + fprintf(stderr, "Failed to read object metadata: %s\n", filename); + return 1; + } + + retval = fn(fs, ino_parent, basename, st.st_mode & ~md.mask, + md.have_uid ? md.uid : st.st_uid, + md.have_gid ? md.gid : st.st_gid, + ino_target); + + if (retval) + { + fprintf(stderr, "Failed to create object: %s\n", filename); + return 1; + } + + return 0; +} + /* Copy a source file from the external environment into the filesystem. */ static int _copy_in(ext2_filsys fs, const char *filename, ext2_ino_t ino_target, @@ -243,25 +276,9 @@ return 1; } - /* Obtain the metadata. */ - - if (lstat(filename, &st)) - { - fprintf(stderr, "Failed to read object metadata: %s\n", filename); + if (_make_object(fs, filename, ino_parent, basename, &ino_target, + image_make_dir)) return 1; - } - - retval = image_make_dir(fs, ino_parent, basename, - st.st_mode & ~md.mask, - md.have_uid ? md.uid : st.st_uid, - md.have_gid ? md.gid : st.st_gid, - &ino_target); - - if (retval) - { - fprintf(stderr, "Failed to create directory: %s\n", filename); - return 1; - } } /* Files are copied. */ @@ -274,24 +291,9 @@ if (target_is_new) { - /* Populate the inode details. */ - - if (lstat(filename, &st)) - { - fprintf(stderr, "Failed to read object metadata: %s\n", filename); + if (_make_object(fs, filename, ino_parent, basename, &ino_target, + image_create_file)) return 1; - } - - retval = image_create_file(fs, ino_parent, basename, - st.st_mode & ~md.mask, - md.have_uid ? md.uid : st.st_uid, - md.have_gid ? md.gid : st.st_gid, - &ino_target); - if (retval) - { - fprintf(stderr, "Failed to create file: %s\n", filename); - return 1; - } flags |= EXT2_FILE_CREATE; }