char *list = NULL;
int i;
- if (no_copy_xattrs)
- return 0;
-
size = llistxattr(filename, NULL, 0);
if (size == -1) {
if (errno == ENOTSUP)
const char *source_dir, ext2_ino_t root,
struct hdlinks_s *hdlinks,
struct file_info *target,
+ int flags,
struct fs_ops_callbacks *fs_callbacks)
{
const char *name;
}
/* Populate the dir recursively*/
retval = __populate_fs(fs, ino, name, root, hdlinks,
- target, fs_callbacks);
+ target, flags, fs_callbacks);
if (retval)
goto out;
if (chdir("..")) {
goto out;
}
- retval = set_inode_xattr(fs, ino, name);
- if (retval) {
- com_err(__func__, retval,
- _("while setting xattrs for \"%s\""), name);
- goto out;
+ if ((flags & POPULATE_FS_NO_COPY_XATTRS) == 0) {
+ retval = set_inode_xattr(fs, ino, name);
+ if (retval) {
+ com_err(__func__, retval,
+ _("while setting xattrs for \"%s\""),
+ name);
+ goto out;
+ }
}
if (fs_callbacks && fs_callbacks->end_create_new_inode) {
return retval;
}
-errcode_t populate_fs2(ext2_filsys fs, ext2_ino_t parent_ino,
- const char *source, ext2_ino_t root,
+errcode_t populate_fs3(ext2_filsys fs, ext2_ino_t parent_ino,
+ const char *source, ext2_ino_t root, int flags,
struct fs_ops_callbacks *fs_callbacks)
{
struct file_info file_info;
* a regular file (or a symlink pointing to a regular file)
*/
if (strcmp(source, "-") == 0) {
- retval = __populate_fs_from_tar(fs, parent_ino, NULL, root, &hdlinks,
- &file_info, fs_callbacks);
+ retval = __populate_fs_from_tar(fs, parent_ino, NULL, root,
+ &hdlinks, &file_info, flags,
+ fs_callbacks);
goto out;
}
return retval;
}
if (S_ISREG(st.st_mode)) {
- retval = __populate_fs_from_tar(fs, parent_ino, source, root, &hdlinks,
- &file_info, fs_callbacks);
+ retval = __populate_fs_from_tar(fs, parent_ino, source, root,
+ &hdlinks, &file_info, flags,
+ fs_callbacks);
goto out;
}
- retval = set_inode_xattr(fs, root, source);
- if (retval) {
- com_err(__func__, retval,
- _("while copying xattrs on root directory"));
- goto out;
+ if ((flags & POPULATE_FS_NO_COPY_XATTRS) == 0) {
+ retval = set_inode_xattr(fs, root, source);
+ if (retval) {
+ com_err(__func__, retval,
+ _("while copying xattrs on root directory"));
+ goto out;
+ }
}
retval = __populate_fs(fs, parent_ino, source, root, &hdlinks,
- &file_info, fs_callbacks);
+ &file_info, flags, fs_callbacks);
out:
free(file_info.path);
return retval;
}
+errcode_t populate_fs2(ext2_filsys fs, ext2_ino_t parent_ino,
+ const char *source, ext2_ino_t root,
+ struct fs_ops_callbacks *fs_callbacks)
+{
+ return populate_fs3(fs, parent_ino, source, root, 0, fs_callbacks);
+}
+
errcode_t populate_fs(ext2_filsys fs, ext2_ino_t parent_ino,
const char *source, ext2_ino_t root)
{
- return populate_fs2(fs, parent_ino, source, root, NULL);
+ return populate_fs3(fs, parent_ino, source, root, 0, NULL);
}
#define HDLINK_CNT (4)
+/* flags for populate_fs3 */
+#define POPULATE_FS_NO_COPY_XATTRS 0x0001
+
struct fs_ops_callbacks {
errcode_t (* create_new_inode)(ext2_filsys fs, const char *target_path,
const char *name, ext2_ino_t parent_ino, ext2_ino_t root,
ext2_ino_t parent_ino, ext2_ino_t root, mode_t mode);
};
-extern int no_copy_xattrs; /* this should eventually be a flag
- passed to populate_fs3() */
-
/* For populating the filesystem */
extern errcode_t populate_fs(ext2_filsys fs, ext2_ino_t parent_ino,
const char *source_dir, ext2_ino_t root);
extern errcode_t populate_fs2(ext2_filsys fs, ext2_ino_t parent_ino,
const char *source_dir, ext2_ino_t root,
struct fs_ops_callbacks *fs_callbacks);
+extern errcode_t populate_fs3(ext2_filsys fs, ext2_ino_t parent_ino,
+ const char *source_dir, ext2_ino_t root,
+ int flags,
+ struct fs_ops_callbacks *fs_callbacks);
extern errcode_t do_mknod_internal(ext2_filsys fs, ext2_ino_t cwd,
const char *name, unsigned int st_mode,
unsigned int st_rdev);
const void *value;
size_t value_size;
- if (no_copy_xattrs)
- return 0;
-
size = dl_archive_entry_xattr_count(entry);
if (size == 0)
return 0;
const char *source_tar, ext2_ino_t root,
struct hdlinks_s *hdlinks EXT2FS_ATTR((unused)),
struct file_info *target,
+ int flags,
struct fs_ops_callbacks *fs_callbacks)
{
char *path2=NULL, *path3=NULL, *dir, *name;
goto out;
}
- retval = set_inode_xattr_tar(fs, tmpino, entry);
- if (retval) {
- com_err(__func__, retval,
- _("while setting xattrs for \"%s\""), name);
- goto out;
+ if ((flags & POPULATE_FS_NO_COPY_XATTRS) == 0) {
+ retval = set_inode_xattr_tar(fs, tmpino, entry);
+ if (retval) {
+ com_err(__func__, retval,
+ _("while setting xattrs for \"%s\""),
+ name);
+ goto out;
+ }
}
if (fs_callbacks && fs_callbacks->end_create_new_inode) {
static int lazy_itable_init;
static int assume_storage_prezeroed;
static int packed_meta_blocks;
-int no_copy_xattrs;
+static int populate_flags;
static char *bad_blocks_filename = NULL;
static __u32 fs_stride;
/* Initialize usr/grp quotas by default */
continue;
}
} else if (strcmp(token, "no_copy_xattrs") == 0) {
- no_copy_xattrs = 1;
+ populate_flags |= POPULATE_FS_NO_COPY_XATTRS;
continue;
} else if (strcmp(token, "num_backup_sb") == 0) {
if (!arg) {
if (!quiet)
printf("%s", _("Copying files into the device: "));
- retval = populate_fs(fs, EXT2_ROOT_INO, src_root,
- EXT2_ROOT_INO);
+ retval = populate_fs3(fs, EXT2_ROOT_INO, src_root,
+ EXT2_ROOT_INO, populate_flags, NULL);
if (retval) {
com_err(program_name, retval, "%s",
_("while populating file system"));