o Add a ``-o'' argument to initattr, which causes extattrctl to overwrite

the existing attribute file rather than aborting with an error.
o Useful if you want to reset the state of attributes on the system without
  allocating different disk blocks through deletion and recreation,
  for example, if you're doing benchmarks of extended attribute code. :-)

Obtained from:	TrustedBSD Project
This commit is contained in:
Robert Watson 2000-09-12 04:40:34 +00:00
parent 16eb772dd7
commit 1fec210a69
2 changed files with 20 additions and 4 deletions

View File

@ -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.

View File

@ -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]);