home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
unix
/
volume21
/
amd
/
part03
/
ufs_ops.c
< prev
Wrap
C/C++ Source or Header
|
1990-04-11
|
3KB
|
160 lines
/*
* $Id: ufs_ops.c,v 5.1.1.2 90/01/11 17:22:09 jsp Exp Locker: jsp $
*
* Copyright (c) 1990 Jan-Simon Pendry
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Jan-Simon Pendry at Imperial College, London.
*
* Redistribution and use in source and binary forms are permitted
* provided that the above copyright notice and this paragraph are
* duplicated in all such forms and that any documentation,
* advertising materials, and other materials related to such
* distribution and use acknowledge that the software was developed
* by Imperial College of Science, Technology and Medicine, London, UK.
* The names of the College and University may not be used to endorse
* or promote products derived from this software without specific
* prior written permission.
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* %W% (Berkeley) %G%
*/
#include "am.h"
#ifdef HAS_UFS
#include <sys/stat.h>
#ifdef NFS_3
typedef nfs_fh fhandle_t;
#endif
#include <sys/mount.h>
#ifdef UFS_HDR
#include UFS_HDR
#endif
/*
* UN*X file system
*/
/*
* UFS needs local filesystem and device.
*/
static int ufs_match(fo)
am_opts *fo;
{
if (!fo->opt_dev) {
plog(XLOG_USER, "ufs: no device specified");
return 0;
}
/*
* Determine magic cookie to put in mtab
*/
fo->fs_mtab = strealloc(fo->fs_mtab, fo->opt_dev);
#ifdef DEBUG
dlog("UFS: mounting device \"%s\" on \"%s\"",
fo->opt_dev, fo->opt_fs);
#endif
return 1;
}
static mount_ufs(dir, fs_name, opts)
char *dir;
char *fs_name;
char *opts;
{
struct ufs_args ufs_args;
struct mntent mnt;
int flags;
/*
* Figure out the name of the file system type.
*/
#ifdef M_NEWTYPE
char *type = MOUNT_TYPE_UFS;
#else
int type = MOUNT_TYPE_UFS;
#endif
bzero((voidp) &ufs_args, sizeof(ufs_args)); /* Paranoid */
/*
* Fill in the mount structure
*/
mnt.mnt_dir = dir;
mnt.mnt_fsname = fs_name;
mnt.mnt_type = MTAB_TYPE_UFS;
mnt.mnt_opts = opts;
mnt.mnt_freq = 1;
mnt.mnt_passno = 2;
flags = compute_mount_flags(&mnt);
#ifdef ULTRIX_HACK
ufs_args.ufs_flags = flags;
ufs_args.ufs_pgthresh = 64; /* 64K - XXX */
flags &= M_RDONLY;
#else
ufs_args.fspec = fs_name;
#endif
/*
* Call generic mount routine
*/
return mount_fs(&mnt, flags, (caddr_t) &ufs_args, 0, type);
}
/*ARGSUSED*/
static int ufs_mount(mp)
am_node *mp;
{
mntfs *mf = mp->am_mnt;
int error;
error = mount_ufs(mf->mf_mount, mf->mf_info, mf->mf_fo->opt_opts);
if (error) {
errno = error;
plog(XLOG_ERROR, "mount_ufs: %m");
return error;
}
return 0;
}
static int ufs_umount(mp)
am_node *mp;
{
mntfs *mf = mp->am_mnt;
return UMOUNT_FS(mf->mf_mount);
}
/*
* Ops structure
*/
am_ops ufs_ops = {
"ufs",
ufs_match,
0, /* ufs_init */
ufs_mount,
ufs_umount,
efs_lookuppn,
efs_readdir,
0, /* ufs_readlink */
0, /* ufs_mounted */
0, /* ufs_umounted */
find_afs_srvr,
FS_MKMNT|FS_NOTIMEOUT|FS_UBACKGROUND|FS_AMQINFO,
&afs_srvr_list,
};
#endif /* HAS_UFS */