default:
printf("%s: Usage: %s <file> <attr> [-f outfile]\n",
argv[0], argv[0]);
- return;
+ goto out2;
}
}
if (optind != argc - 2) {
printf("%s: Usage: %s <file> <attr> [-f outfile]\n", argv[0],
argv[0]);
- return;
+ goto out2;
}
if (check_fs_open(argv[0]))
- return;
+ goto out2;
ino = string_to_inode(argv[optind]);
if (!ino)
- return;
+ goto out2;
err = ext2fs_xattrs_open(current_fs, ino, &h);
if (err)
- return;
+ goto out2;
err = ext2fs_xattrs_read(h);
if (err)
if (fp) {
fwrite(buf, buflen, 1, fp);
- fclose(fp);
} else {
dump_xattr_string(stdout, buf, buflen);
printf("\n");
}
- if (buf)
- ext2fs_free_mem(&buf);
+ ext2fs_free_mem(&buf);
out:
ext2fs_xattrs_close(&h);
if (err)
com_err(argv[0], err, "while getting extended attribute");
+out2:
+ if (fp)
+ fclose(fp);
}
void do_set_xattr(int argc, char **argv)
default:
printf("%s: Usage: %s <file> <attr> [-f infile | "
"value]\n", argv[0], argv[0]);
- return;
+ goto out2;
}
}
if (optind != argc - 2 && optind != argc - 3) {
printf("%s: Usage: %s <file> <attr> [-f infile | value>]\n",
argv[0], argv[0]);
- return;
+ goto out2;
}
if (check_fs_open(argv[0]))
- return;
+ goto out2;
if (check_fs_read_write(argv[0]))
- return;
+ goto out2;
if (check_fs_bitmaps(argv[0]))
- return;
+ goto out2;
ino = string_to_inode(argv[optind]);
if (!ino)
- return;
+ goto out2;
err = ext2fs_xattrs_open(current_fs, ino, &h);
if (err)
- return;
+ goto out2;
err = ext2fs_xattrs_read(h);
if (err)
goto out;
out:
+ ext2fs_xattrs_close(&h);
+ if (err)
+ com_err(argv[0], err, "while setting extended attribute");
+out2:
if (fp) {
fclose(fp);
ext2fs_free_mem(&buf);
}
- ext2fs_xattrs_close(&h);
- if (err)
- com_err(argv[0], err, "while setting extended attribute");
}
void do_rm_xattr(int argc, char **argv)
if (retval) {
r2 = ext2fs_extent_goto(handle, orig_lblk);
if (r2 == 0)
- ext2fs_extent_replace(handle, 0,
+ (void)ext2fs_extent_replace(handle, 0,
&orig_extent);
goto done;
}
r2 = ext2fs_extent_goto(handle,
newextent.e_lblk);
if (r2 == 0)
- ext2fs_extent_delete(handle, 0);
+ (void)ext2fs_extent_delete(handle, 0);
}
r2 = ext2fs_extent_goto(handle, orig_lblk);
if (r2 == 0)
- ext2fs_extent_replace(handle, 0, &orig_extent);
+ (void)ext2fs_extent_replace(handle, 0,
+ &orig_extent);
goto done;
}
}
char ln_target[PATH_MAX];
unsigned int save_inode;
ext2_ino_t ino;
- errcode_t retval;
+ errcode_t retval = 0;
int read_cnt;
int hdlink;
if ((!strcmp(dent->d_name, ".")) ||
(!strcmp(dent->d_name, "..")))
continue;
- lstat(dent->d_name, &st);
+ if (lstat(dent->d_name, &st)) {
+ com_err(__func__, errno, _("while lstat \"%s\""),
+ dent->d_name);
+ goto out;
+ }
name = dent->d_name;
/* Check for hardlinks */
if (retval) {
com_err(__func__, retval,
"while linking %s", name);
- return retval;
+ goto out;
}
continue;
} else
com_err(__func__, retval,
_("while creating special file "
"\"%s\""), name);
- return retval;
+ goto out;
}
break;
case S_IFSOCK:
continue;
case S_IFLNK:
read_cnt = readlink(name, ln_target,
- sizeof(ln_target));
+ sizeof(ln_target) - 1);
if (read_cnt == -1) {
com_err(__func__, errno,
_("while trying to readlink \"%s\""),
com_err(__func__, retval,
_("while writing symlink\"%s\""),
name);
- return retval;
+ goto out;
}
break;
case S_IFREG:
if (retval) {
com_err(__func__, retval,
_("while writing file \"%s\""), name);
- return retval;
+ goto out;
}
break;
case S_IFDIR:
if (retval) {
com_err(__func__, retval,
_("while making dir \"%s\""), name);
- return retval;
+ goto out;
}
retval = ext2fs_namei(fs, root, parent_ino,
name, &ino);
if (retval) {
com_err(name, retval, 0);
- return retval;
+ goto out;
}
/* Populate the dir recursively*/
retval = __populate_fs(fs, ino, name, root, hdlinks);
if (retval) {
com_err(__func__, retval,
_("while adding dir \"%s\""), name);
- return retval;
+ goto out;
}
if (chdir("..")) {
- com_err(__func__, errno,
- _("during cd .."));
- return errno;
+ com_err(__func__, errno, _("during cd .."));
+ retval = errno;
+ goto out;
}
break;
default:
retval = ext2fs_namei(fs, root, parent_ino, name, &ino);
if (retval) {
com_err(name, retval, 0);
- return retval;
+ goto out;
}
retval = set_inode_extra(fs, parent_ino, ino, &st);
if (retval) {
com_err(__func__, retval,
_("while setting inode for \"%s\""), name);
- return retval;
+ goto out;
}
/* Save the hardlink ino */
if (p == NULL) {
com_err(name, errno,
_("Not enough memory"));
- return errno;
+ retval = EXT2_ET_NO_MEMORY;
+ goto out;
}
hdlinks->hdl = p;
hdlinks->size += HDLINK_CNT;
hdlinks->count++;
}
}
+
+out:
closedir(dh);
return retval;
}