fastfs.c revision 7c478bd95313f5f23a4c958a745db2134aa03244
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright (c) 1999 by Sun Microsystems, Inc.
* All rights reserved.
*/
#pragma ident "%Z%%M% %I% %E% SMI"
/*
* fastfs
* user interface to dio (delayed IO) functionality
*/
#include <stdio.h>
#include <locale.h>
#include <errno.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
/*
* make vfstab look like fstab
*/
#define fs_spec vfs_special
#define fs_file vfs_mountp
#define mnt_fsname mnt_special
#define mnt_dir mnt_mountp
#define mnt_type mnt_fstype
#define MNTTYPE_42 "ufs"
#define MNTINFO_DEV "dev"
static struct mntent *
mygetmntent(f, name)
FILE *f;
char *name;
{
int status;
return (&mt);
switch (status) {
case EOF: break; /* normal exit condition */
case MNT_TOOLONG:
name);
break;
case MNT_TOOMANY:
name);
break;
case MNT_TOOFEW:
name);
break;
default:
"Unknown return code, %d, from getmntent() on %s\n",
break;
}
return (NULL);
}
/*
* -a = all
* -f = fast
* -s = safe
*/
static int all = 0;
static int fast = 0;
static int safe = 0;
/*
* exitstatus
* 0 all ok
* 1 internal error
* 2 system call error
*/
static int exitstatus = 0;
/*
* list of filenames
*/
struct filename {
char *fn_name;
};
/*
* for prettyprint
*/
static int firsttime = 0;
/*
* no safe's printed
*/
static int no_safes_printed = 0;
static void exitusage(void);
static void printstatusline(char *, char *);
static void printstatus(char *);
static void getmntnames(void);
static void getcmdnames(int, char **, int);
static void setdio(char *);
int
{
int c;
#if !defined(TEXT_DOMAIN)
#define TEXT_DOMAIN "SYS_TEST"
#endif
(void) textdomain(TEXT_DOMAIN);
exitstatus = 0;
/*
* process command line
*/
opterr = 0;
optarg = 0;
switch (c) {
case 'a':
all = 1;
break;
case 'f':
fast = 1;
break;
case 's':
safe = 1;
break;
default:
exitusage();
break;
}
if (argc == 1) {
no_safes_printed = 1;
all = 1;
}
if (all)
/*
*/
getmntnames();
else
/*
* use command line
*/
/*
* for each filename, doit
*/
else
}
/*
* all done
*/
return (exitstatus);
}
/*
* exitusage
* bad command line, give hint
*/
static void
exitusage(void)
{
exit(1);
}
/*
* printstatusline
* prettyprint the status line
*/
static void
char *fn;
char *mode;
{
if (firsttime++ == 0)
}
/*
* printstatus
* get and prettyprint file system lock status
*/
static void
char *fn;
{
int fd;
int dioval;
if (fd == -1) {
exitstatus = 2;
return;
}
exitstatus = 2;
return;
}
if (dioval)
else
if (no_safes_printed == 0)
}
/*
* getmntnames
*/
static void
getmntnames(void)
{
int fnlen;
continue;
if (fnpc)
else
}
}
/*
* getcmdnames
* file names from command line
*/
static void
int argc;
char **argv;
int i;
{
if (fnpc)
else
}
}
/*
* setdio
* set the dio mode
*/
static void
char *fn;
{
int fd;
int dioval;
if (fd == -1) {
exitstatus = 2;
return;
}
if (fast)
dioval = 1;
if (safe)
dioval = 0;
exitstatus = 2;
}
}