home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / usr.sbin / amd / config / mount_aix.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-05-12  |  4.3 KB  |  154 lines

  1. /*
  2.  * Copyright (c) 1990 Jan-Simon Pendry
  3.  * Copyright (c) 1990 Imperial College of Science, Technology & Medicine
  4.  * Copyright (c) 1990 The Regents of the University of California.
  5.  * All rights reserved.
  6.  *
  7.  * This code is derived from software contributed to Berkeley by
  8.  * Jan-Simon Pendry at Imperial College, London.
  9.  *
  10.  * Redistribution and use in source and binary forms, with or without
  11.  * modification, are permitted provided that the following conditions
  12.  * are met:
  13.  * 1. Redistributions of source code must retain the above copyright
  14.  *    notice, this list of conditions and the following disclaimer.
  15.  * 2. Redistributions in binary form must reproduce the above copyright
  16.  *    notice, this list of conditions and the following disclaimer in the
  17.  *    documentation and/or other materials provided with the distribution.
  18.  * 3. All advertising materials mentioning features or use of this software
  19.  *    must display the following acknowledgement:
  20.  *    This product includes software developed by the University of
  21.  *    California, Berkeley and its contributors.
  22.  * 4. Neither the name of the University nor the names of its contributors
  23.  *    may be used to endorse or promote products derived from this software
  24.  *    without specific prior written permission.
  25.  *
  26.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  27.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  28.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  29.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  30.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  31.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  32.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  33.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  34.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  35.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  36.  * SUCH DAMAGE.
  37.  *
  38.  *    @(#)mount_aix.c    5.3 (Berkeley) 5/12/91
  39.  *
  40.  * $Id: mount_aix.c,v 5.2.1.2 91/05/07 22:19:30 jsp Alpha $
  41.  *
  42.  */
  43.  
  44.  
  45. /*
  46.  * AIX 3 Mount helper
  47.  */
  48.  
  49. #include "misc-aix3.h"
  50.  
  51. static int aix3_mkvp(p, gfstype, flags, object, stub, host, info, info_size, args)
  52. char *p;
  53. int gfstype;
  54. int flags;
  55. char *object;
  56. char *stub;
  57. char *host;
  58. char *info;
  59. int info_size;
  60. char *args;
  61. {
  62.     struct vmount *vp = (struct vmount *) p;
  63.     bzero((voidp) vp, sizeof(*vp));
  64.     /*
  65.      * Fill in standard fields
  66.      */
  67.     vp->vmt_revision = VMT_REVISION;
  68.     vp->vmt_flags = flags;
  69.     vp->vmt_gfstype = gfstype;
  70.  
  71. #define    VMT_ROUNDUP(len) (4 * ((len + 3) / 4))
  72. #define VMT_ASSIGN(vp, idx, data, size) \
  73.     vp->vmt_data[idx].vmt_off = p - (char *) vp; \
  74.     vp->vmt_data[idx].vmt_size = size; \
  75.     bcopy(data, p, size); \
  76.     p += VMT_ROUNDUP(size);
  77.  
  78.     /*
  79.      * Fill in all variable length data
  80.      */
  81.     p += sizeof(*vp);
  82.  
  83.     VMT_ASSIGN(vp, VMT_OBJECT, object, strlen(object) + 1);
  84.     VMT_ASSIGN(vp, VMT_STUB, stub, strlen(stub) + 1);
  85.     VMT_ASSIGN(vp, VMT_HOST, host, strlen(host) + 1);
  86.     VMT_ASSIGN(vp, VMT_HOSTNAME, host, strlen(host) + 1);
  87.     VMT_ASSIGN(vp, VMT_INFO, info, info_size);
  88.     VMT_ASSIGN(vp, VMT_ARGS, args, strlen(args) + 1);
  89.  
  90. #undef VMT_ASSIGN
  91. #undef VMT_ROUNDUP
  92.  
  93.     /*
  94.      * Return length
  95.      */
  96.     return vp->vmt_length = p - (char *) vp;
  97. }
  98.  
  99. /*
  100.  * Map from conventional mount arguments
  101.  * to AIX 3-style arguments.
  102.  */
  103. aix3_mount(fsname, dir, flags, type, data, args)
  104. char *fsname;
  105. char *dir;
  106. int flags;
  107. int type;
  108. void *data;
  109. char *args;
  110. {
  111.     char buf[4096];
  112.     int size;
  113.  
  114. #ifdef DEBUG
  115.     dlog("aix3_mount: fsname %s, dir %s, type %d", fsname, dir, type);
  116. #endif /* DEBUG */
  117.  
  118. /* aix3_mkvp(p, gfstype, flags, object, stub, host, info, info_size, args) */
  119.  
  120.     switch (type) {
  121.  
  122.     case MOUNT_TYPE_NFS: {
  123.         char *host = strdup(fsname);
  124.         char *rfs = strchr(host, ':');
  125.         int free_rfs = 0;
  126.         if (rfs) {
  127.             *rfs++ = '\0';
  128.         } else {
  129.             rfs = host;
  130.             free_rfs = 1;
  131.             host = strdup(hostname);
  132.         }
  133.  
  134.         size = aix3_mkvp(buf, type, flags, rfs, dir, host, data, sizeof(struct nfs_args), args);
  135.         if (free_rfs)
  136.             free((voidp) rfs);
  137.         free(host);
  138.  
  139.         } break;
  140.  
  141.     case MOUNT_TYPE_UFS:
  142.         /* Need to open block device and extract log device info from sblk. */
  143.         return EINVAL;
  144.  
  145.     default:
  146.         return EINVAL;
  147.     }
  148. #ifdef DEBUG
  149.     /*dlog("aix3_mkvp: flags %#x, size %d, args %s", flags, size, args);*/
  150. #endif /* DEBUG */
  151.  
  152.     return vmount(buf, size);
  153. }
  154.