home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / ip / nfs / amd / amd-5.2 / config / mtab_aix.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-06-23  |  2.9 KB  |  118 lines

  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.  *    %W% (Berkeley) %G%
  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 */
  118.