home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume21 / amd / part03 / ufs_ops.c < prev   
C/C++ Source or Header  |  1990-04-11  |  3KB  |  160 lines

  1. /*
  2.  * $Id: ufs_ops.c,v 5.1.1.2 90/01/11 17:22:09 jsp Exp Locker: jsp $
  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
  13.  * provided that the above copyright notice and this paragraph are
  14.  * duplicated in all such forms and that any documentation,
  15.  * advertising materials, and other materials related to such
  16.  * distribution and use acknowledge that the software was developed
  17.  * by Imperial College of Science, Technology and Medicine, London, UK.
  18.  * The names of the College and University may not be used to endorse
  19.  * or promote products derived from this software without specific
  20.  * prior written permission.
  21.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  22.  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  23.  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  24.  *
  25.  *    %W% (Berkeley) %G%
  26.  */
  27.  
  28. #include "am.h"
  29.  
  30. #ifdef HAS_UFS
  31.  
  32. #include <sys/stat.h>
  33. #ifdef NFS_3
  34. typedef nfs_fh fhandle_t;
  35. #endif
  36. #include <sys/mount.h>
  37.  
  38. #ifdef UFS_HDR
  39. #include UFS_HDR
  40. #endif
  41.  
  42. /*
  43.  * UN*X file system
  44.  */
  45.  
  46. /*
  47.  * UFS needs local filesystem and device.
  48.  */
  49. static int ufs_match(fo)
  50. am_opts *fo;
  51. {
  52.     if (!fo->opt_dev) {
  53.         plog(XLOG_USER, "ufs: no device specified");
  54.         return 0;
  55.     }
  56.     /*
  57.      * Determine magic cookie to put in mtab
  58.      */
  59.     fo->fs_mtab = strealloc(fo->fs_mtab, fo->opt_dev);
  60. #ifdef DEBUG
  61.     dlog("UFS: mounting device \"%s\" on \"%s\"",
  62.         fo->opt_dev, fo->opt_fs);
  63. #endif
  64.  
  65.     return 1;
  66. }
  67.  
  68. static mount_ufs(dir, fs_name, opts)
  69. char *dir;
  70. char *fs_name;
  71. char *opts;
  72. {
  73.     struct ufs_args ufs_args;
  74.     struct mntent mnt;
  75.     int flags;
  76.  
  77.     /*
  78.      * Figure out the name of the file system type.
  79.      */
  80. #ifdef M_NEWTYPE
  81.     char *type = MOUNT_TYPE_UFS;
  82. #else
  83.     int type = MOUNT_TYPE_UFS;
  84. #endif
  85.  
  86.     bzero((voidp) &ufs_args, sizeof(ufs_args));    /* Paranoid */
  87.  
  88.     /*
  89.      * Fill in the mount structure
  90.      */
  91.     mnt.mnt_dir = dir;
  92.     mnt.mnt_fsname = fs_name;
  93.     mnt.mnt_type = MTAB_TYPE_UFS;
  94.     mnt.mnt_opts = opts;
  95.     mnt.mnt_freq = 1;
  96.     mnt.mnt_passno = 2;
  97.  
  98.     flags = compute_mount_flags(&mnt);
  99.  
  100. #ifdef ULTRIX_HACK
  101.     ufs_args.ufs_flags = flags;
  102.     ufs_args.ufs_pgthresh = 64; /* 64K - XXX */
  103.     flags &= M_RDONLY;
  104. #else
  105.     ufs_args.fspec = fs_name;
  106. #endif
  107.  
  108.     /*
  109.      * Call generic mount routine
  110.      */
  111.     return mount_fs(&mnt, flags, (caddr_t) &ufs_args, 0, type);
  112. }
  113.  
  114. /*ARGSUSED*/
  115. static int ufs_mount(mp)
  116. am_node *mp;
  117. {
  118.     mntfs *mf = mp->am_mnt;
  119.  
  120.     int error;
  121.  
  122.     error = mount_ufs(mf->mf_mount, mf->mf_info, mf->mf_fo->opt_opts);
  123.     if (error) {
  124.         errno = error;
  125.         plog(XLOG_ERROR, "mount_ufs: %m");
  126.         return error;
  127.     }
  128.  
  129.     return 0;
  130. }
  131.  
  132. static int ufs_umount(mp)
  133. am_node *mp;
  134. {
  135.     mntfs *mf = mp->am_mnt;
  136.  
  137.     return UMOUNT_FS(mf->mf_mount);
  138. }
  139.  
  140. /*
  141.  * Ops structure
  142.  */
  143. am_ops ufs_ops = {
  144.     "ufs",
  145.     ufs_match,
  146.     0, /* ufs_init */
  147.     ufs_mount,
  148.     ufs_umount,
  149.     efs_lookuppn,
  150.     efs_readdir,
  151.     0, /* ufs_readlink */
  152.     0, /* ufs_mounted */
  153.     0, /* ufs_umounted */
  154.     find_afs_srvr,
  155.     FS_MKMNT|FS_NOTIMEOUT|FS_UBACKGROUND|FS_AMQINFO,
  156.     &afs_srvr_list,
  157. };
  158.  
  159. #endif /* HAS_UFS */
  160.