aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin/extattrctl/extattrctl.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/extattrctl/extattrctl.c')
-rw-r--r--usr.sbin/extattrctl/extattrctl.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/usr.sbin/extattrctl/extattrctl.c b/usr.sbin/extattrctl/extattrctl.c
index 7d34831f007c..2d08926e1869 100644
--- a/usr.sbin/extattrctl/extattrctl.c
+++ b/usr.sbin/extattrctl/extattrctl.c
@@ -54,7 +54,7 @@ usage(void)
"usage:\n"
" extattrctl start [path]\n"
" extattrctl stop [path]\n"
- " extattrctl initattr [-p path] [attrsize] [attrfile]\n"
+ " extattrctl initattr [-o] [-p path] [attrsize] [attrfile]\n"
" extattrctl enable [path] [attrname] [attrfile]\n"
" extattrctl disable [path] [attrname]\n");
exit(-1);
@@ -82,11 +82,14 @@ initattr(int argc, char *argv[])
char *fs_path = NULL;
char *zero_buf = NULL;
long loop, num_inodes;
- int ch, i, error, chunksize;
+ int ch, i, error, chunksize, overwrite = 0, flags;
optind = 0;
- while ((ch = getopt(argc, argv, "p:r:w:")) != -1)
+ while ((ch = getopt(argc, argv, "op:r:w:")) != -1)
switch (ch) {
+ case 'o':
+ overwrite = 1;
+ break;
case 'p':
fs_path = strdup(optarg);
break;
@@ -101,8 +104,13 @@ initattr(int argc, char *argv[])
if (argc != 2)
usage();
+ if (overwrite)
+ flags = O_CREAT | O_WRONLY;
+ else
+ flags = O_CREAT | O_EXCL | O_WRONLY;
+
error = 0;
- if ((i = open(argv[1], O_CREAT | O_EXCL | O_WRONLY, 0600)) != -1) {
+ if ((i = open(argv[1], flags, 0600)) != -1) {
uef.uef_magic = UFS_EXTATTR_MAGIC;
uef.uef_version = UFS_EXTATTR_VERSION;
uef.uef_size = atoi(argv[0]);