- fprintf(stderr, "%s: Unmounted\n", name);
- while ((p1 = rindex(name, '/')) && p1[1] == 0)
- *p1 = 0;
- if (p1)
- name = p1 + 1;
- for (mp = mtab; mp < &mtab[NMOUNT]; mp++) {
- if (strncmp(mp->spec, name, sizeof (mp->spec)))
- continue;
- *mp = zeromtab;
- for (mp = &mtab[NMOUNT]; mp >= mtab; mp--)
- if (mp->file[0])
- break;
- mp++;
- mf = creat("/etc/mtab", 0644);
- write(mf, (char *)mtab, (mp-mtab) * sizeof (struct mtab));
- return (1);
+ fprintf(stderr, "%s: Unmounted from %s\n", name, mntpt);
+
+#ifdef NFS
+ if (!fake && hp != NULL && (fflag & MNT_FORCE) == 0) {
+ *delimp = '\0';
+ bcopy(hp->h_addr,(caddr_t)&saddr.sin_addr,hp->h_length);
+ saddr.sin_family = AF_INET;
+ saddr.sin_port = 0;
+ pertry.tv_sec = 3;
+ pertry.tv_usec = 0;
+ if ((clp = clntudp_create(&saddr, RPCPROG_MNT, RPCMNT_VER1,
+ pertry, &so)) == NULL) {
+ clnt_pcreateerror("Cannot MNT PRC");
+ return (1);
+ }
+ clp->cl_auth = authunix_create_default();
+ try.tv_sec = 20;
+ try.tv_usec = 0;
+ clnt_stat = clnt_call(clp, RPCMNT_UMOUNT, xdr_dir, name,
+ xdr_void, (caddr_t)0, try);
+ if (clnt_stat != RPC_SUCCESS) {
+ clnt_perror(clp, "Bad MNT RPC");
+ return (1);
+ }
+ auth_destroy(clp->cl_auth);
+ clnt_destroy(clp);
+ }
+#endif /* NFS */
+ return (1);
+}
+
+char *
+getmntname(name, what, type)
+ char *name;
+ int what;
+ int *type;
+{
+ int mntsize, i;
+ struct statfs *mntbuf;
+
+ if ((mntsize = getmntinfo(&mntbuf, MNT_NOWAIT)) == 0) {
+ perror("umount");
+ return (0);
+ }
+ for (i = 0; i < mntsize; i++) {
+ if (what == MNTON && !strcmp(mntbuf[i].f_mntfromname, name)) {
+ if (type)
+ *type = mntbuf[i].f_type;
+ return (mntbuf[i].f_mntonname);
+ }
+ if (what == MNTFROM && !strcmp(mntbuf[i].f_mntonname, name)) {
+ if (type)
+ *type = mntbuf[i].f_type;
+ return (mntbuf[i].f_mntfromname);
+ }