a9c9600de3
Changes since 0.6 (except some OS fixes): - renamed everything to Sharity-Light. It turned out that Wall Data Incorporated has registered the trademark "RUMBA". No functional changes have been made. The executable is now "shlight" and the version number has been set to 1.0 to indicate that the product is now well tested and considered stable, at least as stable as it can and will get. - fixed timezone bug in kernel.c kernel_init() - fixed crash when no mountpoint was specified - added option to set workgroup/domain Package provided by Jared McNeill in pkg/12360 based on the previous rumba package.
74 lines
1.5 KiB
C
74 lines
1.5 KiB
C
/* $NetBSD: unshlight.c,v 1.1.1.1 2001/03/09 16:09:36 wiz Exp $ */
|
|
#include <sys/param.h>
|
|
#include <sys/mount.h>
|
|
|
|
#include <err.h>
|
|
#include <sysexits.h>
|
|
#include <unistd.h>
|
|
#include <stdlib.h>
|
|
#include <signal.h>
|
|
|
|
static void usage(void);
|
|
|
|
int
|
|
main(int argc, char** argv)
|
|
{
|
|
struct statfs* mntbuf;
|
|
int mntcount, i;
|
|
int aflag=0;
|
|
int ch;
|
|
|
|
while ( (ch = getopt(argc, argv, "a")) != -1) {
|
|
switch (ch) {
|
|
case 'a':
|
|
aflag=1;
|
|
break;
|
|
case '?':
|
|
default:
|
|
usage();
|
|
}
|
|
}
|
|
argc -= optind;
|
|
argv += optind;
|
|
if (aflag && argc != 0)
|
|
usage();
|
|
if (!aflag && argc == 0)
|
|
usage();
|
|
|
|
for (; argc>0 || aflag; aflag?(void)(aflag=0):(void)(argc--, argv++)) {
|
|
char abspath[MAXPATHLEN];
|
|
pid_t pid=0;
|
|
if (argc > 0) {
|
|
if (realpath(argv[0], abspath) == 0) {
|
|
warn(abspath);
|
|
continue;
|
|
}
|
|
}
|
|
mntcount=getmntinfo(&mntbuf, MNT_NOWAIT);
|
|
if (mntcount < 0)
|
|
err(EX_OSERR, "getmntinfo");
|
|
for (i=0; i<mntcount; i++) {
|
|
char* s;
|
|
int error;
|
|
if (argc > 0 && strcmp(abspath, mntbuf[i].f_mntonname) != 0) continue;
|
|
if (strcmp(mntbuf[i].f_fstypename,MOUNT_NFS) !=0 ) continue;
|
|
if (strncmp(mntbuf[i].f_mntfromname, "shlight-", 8) != 0) continue;
|
|
pid=strtoul(mntbuf[i].f_mntfromname+8, &s, 10);
|
|
if (*s) continue;
|
|
error = unmount (mntbuf[i].f_mntonname, 0);
|
|
if (error == 0) {
|
|
kill (pid, SIGHUP);
|
|
} else {
|
|
warn(mntbuf[i].f_mntonname);
|
|
}
|
|
}
|
|
if (argc > 0 && !pid)
|
|
warnx("%s: not currently mounted", abspath);
|
|
}
|
|
}
|
|
|
|
void
|
|
usage(void)
|
|
{
|
|
errx(EX_USAGE, "Usage: unshlight [-a] [node]");
|
|
}
|