|
|
1.1 root 1: /*
2: * $Id: mtab_aix.c,v 5.2 90/06/23 22:20:36 jsp Rel $
3: *
4: * Copyright (c) 1990 Jan-Simon Pendry
5: * Copyright (c) 1990 Imperial College of Science, Technology & Medicine
6: * Copyright (c) 1990 The Regents of the University of California.
7: * All rights reserved.
8: *
9: * This code is derived from software contributed to Berkeley by
10: * Jan-Simon Pendry at Imperial College, London.
11: *
12: * Redistribution and use in source and binary forms are permitted provided
13: * that: (1) source distributions retain this entire copyright notice and
14: * comment, and (2) distributions including binaries display the following
15: * acknowledgement: ``This product includes software developed by the
16: * University of California, Berkeley and its contributors'' in the
17: * documentation or other materials provided with the distribution and in
18: * all advertising materials mentioning features or use of this software.
19: * Neither the name of the University nor the names of its contributors may
20: * be used to endorse or promote products derived from this software without
21: * specific prior written permission.
22: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
23: * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
24: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
25: *
26: * @(#)mtab_aix.c 5.1 (Berkeley) 6/29/90
27: */
28:
29: #include "am.h"
30:
31: #ifdef READ_MTAB_AIX3_STYLE
32:
33: #include <sys/mntctl.h>
34: #include <sys/vmount.h>
35:
36: static struct mntent *mnt_dup(mp)
37: struct vmount *mp;
38: {
39: struct mntent *new_mp = ALLOC(mntent);
40:
41: char *ty;
42: new_mp->mnt_fsname = strdup(vmt2dataptr(mp, VMT_OBJECT));
43: new_mp->mnt_dir = strdup(vmt2dataptr(mp, VMT_STUB));
44: new_mp->mnt_opts = strdup(vmt2dataptr(mp, VMT_ARGS));
45: switch (mp->vmt_gfstype) {
46: case MNT_JFS: ty = MTAB_TYPE_UFS; break;
47: case MNT_NFS: ty = MTAB_TYPE_NFS; break;
48: default: ty = "unknown"; break;
49: }
50: new_mp->mnt_type = strdup(ty);
51: new_mp->mnt_passno = mp->vmt_vfsnumber;
52: new_mp->mnt_freq = 0;
53:
54: return new_mp;
55: }
56:
57: /*
58: * Read a mount table into memory
59: */
60: mntlist *read_mtab(fs)
61: char *fs;
62: {
63: mntlist **mpp, *mhp;
64:
65: int i;
66: char *mntinfo = 0, *cp;
67: struct vmount *vp;
68: int ret;
69:
70: /*
71: * First figure out size of mount table
72: * and allocate space for a copy...
73: * Then get mount table for real.
74: */
75: ret = mntctl(MCTL_QUERY, sizeof(i), &i);
76: if (ret == 0) {
77: mntinfo = xmalloc(i);
78: ret = mntctl(MCTL_QUERY, i, mntinfo);
79: }
80:
81: if (ret <= 0) {
82: plog(XLOG_ERROR, "mntctl: %m");
83: goto out;
84: }
85: #ifdef DEBUG
86: /*dlog("mntctl returns %d structures", ret);*/
87: #endif /* DEBUG */
88:
89: mpp = &mhp;
90: for (i = 0, cp = mntinfo; i < ret; i++, cp += vp->vmt_length) {
91: vp = (struct vmount *) cp;
92:
93: /*
94: * Allocate a new slot
95: */
96: *mpp = ALLOC(mntlist);
97:
98: /*
99: * Copy the data returned by mntctl
100: */
101: (*mpp)->mnt = mnt_dup(vp);
102:
103: /*
104: * Move to next pointer
105: */
106: mpp = &(*mpp)->mnext;
107: }
108:
109: *mpp = 0;
110:
111: out:
112: if (mntinfo)
113: free(mntinfo);
114: return mhp;
115: }
116:
117: #endif /* READ_MTAB_AIX3_STYLE */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.