aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin/extattrctl
diff options
context:
space:
mode:
authorRobert Watson <rwatson@FreeBSD.org>2000-09-12 04:40:34 +0000
committerRobert Watson <rwatson@FreeBSD.org>2000-09-12 04:40:34 +0000
commit1fec210a697d244902acf2a4c8991f8f07a0a62b (patch)
tree12b3145c0187cc048f7aa327c5b1e2c7bbc87c42 /usr.sbin/extattrctl
parent16eb772dd793b44daf2ae297311b3b3437767e2c (diff)
Notes
Diffstat (limited to 'usr.sbin/extattrctl')
-rw-r--r--usr.sbin/extattrctl/extattrctl.88
-rw-r--r--usr.sbin/extattrctl/extattrctl.c16
2 files changed, 20 insertions, 4 deletions
diff --git a/usr.sbin/extattrctl/extattrctl.8 b/usr.sbin/extattrctl/extattrctl.8
index 60c6009aeb22..52ad1349a64a 100644
--- a/usr.sbin/extattrctl/extattrctl.8
+++ b/usr.sbin/extattrctl/extattrctl.8
@@ -40,6 +40,7 @@
.Ar path
.Nm extattrctl
.Cm initattr
+.Op Fl o
.Op Fl p Ar path
.Ar attrsize
.Ar attrfile
@@ -75,6 +76,7 @@ Stop extended attribute support on the file system named using
Extended attribute support must previously have been started.
.It Xo
.Cm initattr
+.Op Fl o
.Op Fl p Ar path
.Ar attrsize attrfile
.Xc
@@ -85,6 +87,12 @@ as well as the file where the attribute will be stored, using
.Ar attrfile .
.Pp
The
+.Fl o
+argument may be used to indicate that it is alright to overwrite an
+existing attribute backing file; otherwise, if the target file exists,
+an error will be returned.
+.Pp
+The
.Fl p Ar path
argument may be used to preallocate space for all attributes rather than
relying on sparse files to conserve space.
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]);