-# $OpenBSD: Makefile,v 1.8 1996/10/16 12:46:32 mickey Exp $
-# $NetBSD: Makefile,v 1.10 1995/10/01 06:00:32 phil Exp $
+# $OpenBSD: Makefile,v 1.9 1996/12/08 15:15:44 niklas Exp $
+# $NetBSD: Makefile,v 1.13 1996/10/02 16:19:51 ws Exp $
LIB= sa
.PATH: ${DIR}
-#DEBUGFLAGS= -DNETIF_DEBUG -DETHER_DEBUG -DNFS_DEBUG -DRPC_DEBUG -DRARP_DEBUG -DDEBUG -DPARANOID -Wall
+#DEBUGFLAGS= -DBOOTP_DEBUG -DNETIF_DEBUG -DETHER_DEBUG -DNFS_DEBUG -DRPC_DEBUG -DRARP_DEBUG -DDEBUG -DPARANOID -Wall
#DEBUGFLAGS= -ansi -pedantic -Wall
AFLAGS+=${XAFLAGS}
CFLAGS+=${XCFLAGS} -D_STANDALONE -DCOMPAT_UFS $(DEBUGFLAGS) -I${DIR} -I${DIR}/../..
+#
+# Needed for PowerPC
+CFLAGS+=$(EXTRACFLAGS)
CPPFLAGS+=${XCPPFLAGS}
.if ${MACHINE_ARCH}=="i386"
SRCS+= bootp.c rarp.c bootparam.c
# boot filesystems
-SRCS+= ufs.c nfs.c
+SRCS+= ufs.c nfs.c cd9660.c
NOPROFILE=
NOPIC=
-# $OpenBSD: Makefile.inc,v 1.3 1996/09/23 14:18:45 mickey Exp $
-# $NetBSD: Makefile.inc,v 1.4 1995/10/01 06:00:38 phil Exp $
+# $OpenBSD: Makefile.inc,v 1.4 1996/12/08 15:15:44 niklas Exp $
+# $NetBSD: Makefile.inc,v 1.5 1996/09/30 16:01:18 ws Exp $
#
# NOTE: $S must correspond to the top of the 'sys' tree
SADIR= $S/lib/libsa
LD='${LD}' \
XCPPFLAGS="${CPPFLAGS}" \
SAREL="${SAREL}" \
- SADIR="${SADIR}"
+ SADIR="${SADIR}" \
+ EXTRACFLAGS="${EXTRACFLAGS}"
${SALIB}: .NOTMAIN __always_make_salib
@echo making sure the stand-alone library is up to date...
-/* $OpenBSD: alloc.c,v 1.2 1996/09/23 14:18:46 mickey Exp $ */
-/* $NetBSD: alloc.c,v 1.3 1994/10/26 05:44:34 cgd Exp $ */
+/* $OpenBSD: alloc.c,v 1.3 1996/12/08 15:15:45 niklas Exp $ */
+/* $NetBSD: alloc.c,v 1.4 1996/09/26 23:15:00 cgd Exp $ */
/*-
* Copyright (c) 1993
f = f->next;
}
if (f == (struct fl *)0) {
- f = (struct fl *)top;
- top += ALIGN(size);
+ f = (struct fl *)ALIGN(top);
+ top = (char *)f + ALIGN(size);
} else
*prev = f->next;
return ((void *)f);
-/* $OpenBSD: arp.c,v 1.4 1996/10/16 14:18:34 mickey Exp $ */
-/* $NetBSD: arp.c,v 1.13 1995/12/08 04:12:53 gwr Exp $ */
+/* $OpenBSD: arp.c,v 1.5 1996/12/08 15:15:45 niklas Exp $ */
+/* $NetBSD: arp.c,v 1.15 1996/10/13 02:28:58 christos Exp $ */
/*
* Copyright (c) 1992 Regents of the University of California.
#ifdef ARP_DEBUG
if (debug) {
printf("arp: response from %s\n",
- ether_sprintf(rbuf.eh.ether_shost));
+ ether_sprintf(rbuf.eh.ether_shost));
printf("arp: cacheing %s --> %s\n",
- inet_ntoa(addr),
- ether_sprintf(ah->arp_sha));
+ inet_ntoa(addr), ether_sprintf(ah->arp_sha));
}
#endif
MACPY(ah->arp_sha, al->ea);
#ifdef ARP_DEBUG
if (debug) {
- printf("arp_reply: to %s\n",
- ether_sprintf(arp->arp_sha));
+ printf("arp_reply: to %s\n", ether_sprintf(arp->arp_sha));
}
#endif
-/* $OpenBSD: bootp.c,v 1.5 1996/10/16 14:18:35 mickey Exp $ */
-/* $NetBSD: bootp.c,v 1.7 1995/09/18 21:19:20 pk Exp $ */
+/* $OpenBSD: bootp.c,v 1.6 1996/12/08 15:15:46 niklas Exp $ */
+/* $NetBSD: bootp.c,v 1.10 1996/10/13 02:28:59 christos Exp $ */
/*
* Copyright (c) 1992 Regents of the University of California.
ep = cp + len;
/* Step over magic cookie */
- cp += sizeof(long);
+ cp += sizeof(int);
while (cp < ep) {
tag = *cp++;
-/* $OpenBSD: bootp.h,v 1.3 1996/09/27 07:44:42 mickey Exp $ */
-/* $NetBSD: bootp.h,v 1.2 1994/10/26 05:44:39 cgd Exp $ */
+/* $OpenBSD: bootp.h,v 1.4 1996/12/08 15:15:46 niklas Exp $ */
+/* $NetBSD: bootp.h,v 1.3 1996/09/26 23:22:01 cgd Exp $ */
/*
* Bootstrap Protocol (BOOTP). RFC951 and RFC1048.
u_char bp_htype; /* hardware addr type */
u_char bp_hlen; /* hardware addr length */
u_char bp_hops; /* gateway hops */
- u_long bp_xid; /* transaction ID */
+ u_int bp_xid; /* transaction ID */
u_short bp_secs; /* seconds since boot began */
u_short bp_flags; /* RFC1532 broadcast, etc. */
struct in_addr bp_ciaddr; /* client IP address */
struct cmu_vend {
unsigned char v_magic[4]; /* magic number */
- unsigned long v_flags; /* flags/opcodes, etc. */
+ unsigned int v_flags; /* flags/opcodes, etc. */
struct in_addr v_smask; /* Subnet mask */
struct in_addr v_dgate; /* Default gateway */
struct in_addr v_dns1, v_dns2; /* Domain name servers */
-/* $OpenBSD: bootparam.c,v 1.6 1996/10/16 14:18:35 mickey Exp $ */
-/* $NetBSD: bootparam.c,v 1.7 1996/02/26 23:05:14 gwr Exp $ */
+/* $OpenBSD: bootparam.c,v 1.7 1996/12/08 15:15:47 niklas Exp $ */
+/* $NetBSD: bootparam.c,v 1.10 1996/10/14 21:16:55 thorpej Exp $ */
/*
* Copyright (c) 1995 Gordon W. Ross
#include "rpc.h"
#include "bootparam.h"
+#ifdef DEBUG_RPC
+#define RPC_PRINTF(a) printf a
+#else
+#define RPC_PRINTF(a)
+#endif
+
struct in_addr bp_server_addr; /* net order */
n_short bp_server_port; /* net order */
struct iodesc *d;
int len, x;
-#ifdef RPC_DEBUG
- printf("bp_whoami: myip=%s\n", inet_ntoa(myip));
-#endif
+ RPC_PRINTF(("bp_whoami: myip=%s\n", inet_ntoa(myip)));
if (!(d = socktodesc(sockfd))) {
-#ifdef RPC_DEBUG
- printf("bp_whoami: bad socket. %d\n", sockfd);
-#endif
+ RPC_PRINTF(("bp_whoami: bad socket. %d\n", sockfd));
return (-1);
}
args = &sdata.d;
*/
bp_server_port = repl->port;
-#ifdef RPC_DEBUG
- printf("bp_whoami: server at %s:%d\n",
- inet_ntoa(bp_server_addr), ntohs(bp_server_port));
-#endif
+ RPC_PRINTF(("bp_whoami: server at %s:%d\n",
+ inet_ntoa(bp_server_addr), ntohs(bp_server_port)));
/* We have just done a portmap call, so cache the portnum. */
rpc_pmap_putcache(bp_server_addr,
/* client name */
hostnamelen = MAXHOSTNAMELEN-1;
if (xdr_string_decode(&recv_head, hostname, &hostnamelen)) {
-#ifdef RPC_DEBUG
- printf("bp_whoami: bad hostname\n");
-#endif
+ RPC_PRINTF(("bp_whoami: bad hostname\n"));
return (-1);
}
/* domain name */
domainnamelen = MAXHOSTNAMELEN-1;
if (xdr_string_decode(&recv_head, domainname, &domainnamelen)) {
-#ifdef RPC_DEBUG
- printf("bp_whoami: bad domainname\n");
-#endif
+ RPC_PRINTF(("bp_whoami: bad domainname\n"));
return (-1);
}
/* gateway address */
if (xdr_inaddr_decode(&recv_head, &gateip)) {
-#ifdef RPC_DEBUG
- printf("bp_whoami: bad gateway\n");
-#endif
+ RPC_PRINTF(("bp_whoami: bad gateway\n"));
return (-1);
}
int sn_len, path_len, rlen;
if (!(d = socktodesc(sockfd))) {
-#ifdef RPC_DEBUG
- printf("bp_getfile: bad socket. %d\n", sockfd);
-#endif
+ RPC_PRINTF(("bp_getfile: bad socket. %d\n", sockfd));
return (-1);
}
/* client name (hostname) */
if (xdr_string_encode(&send_tail, hostname, hostnamelen)) {
-#ifdef RPC_DEBUG
- printf("bp_getfile: bad client\n");
-#endif
+ RPC_PRINTF(("bp_getfile: bad client\n"));
return (-1);
}
/* key name (root or swap) */
if (xdr_string_encode(&send_tail, key, strlen(key))) {
-#ifdef RPC_DEBUG
- printf("bp_getfile: bad key\n");
-#endif
+ RPC_PRINTF(("bp_getfile: bad key\n"));
return (-1);
}
sdata.d, send_tail - (char*)sdata.d,
rdata.d, sizeof(rdata.d));
if (rlen < 4) {
-#ifdef RPC_DEBUG
- printf("bp_getfile: short reply\n");
-#endif
+ RPC_PRINTF(("bp_getfile: short reply\n"));
errno = EBADRPC;
return (-1);
}
/* server name */
sn_len = FNAME_SIZE-1;
if (xdr_string_decode(&recv_head, serv_name, &sn_len)) {
-#ifdef RPC_DEBUG
- printf("bp_getfile: bad server name\n");
-#endif
+ RPC_PRINTF(("bp_getfile: bad server name\n"));
return (-1);
}
/* server IP address (mountd/NFS) */
if (xdr_inaddr_decode(&recv_head, serv_addr)) {
-#ifdef RPC_DEBUG
- printf("bp_getfile: bad server addr\n");
-#endif
+ RPC_PRINTF(("bp_getfile: bad server addr\n"));
return (-1);
}
/* server pathname */
path_len = MAXPATHLEN-1;
if (xdr_string_decode(&recv_head, pathname, &path_len)) {
-#ifdef RPC_DEBUG
- printf("bp_getfile: bad server path\n");
-#endif
+ RPC_PRINTF(("bp_getfile: bad server path\n"));
return (-1);
}
xi = (struct xdr_inaddr *) *pkt;
*pkt += sizeof(*xi);
if (xi->atype != htonl(1)) {
-#ifdef RPC_DEBUG
- printf("xdr_inaddr_decode: bad addrtype=%ld\n",
- ntohl(xi->atype));
-#endif
+ RPC_PRINTF(("xdr_inaddr_decode: bad addrtype=%d\n",
+ ntohl(xi->atype)));
return(-1);
}
--- /dev/null
+/* $NetBSD: cd9660.c,v 1.1 1996/09/30 16:01:19 ws Exp $ */
+
+/*
+ * Copyright (C) 1996 Wolfgang Solfrank.
+ * Copyright (C) 1996 TooLs GmbH.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by TooLs GmbH.
+ * 4. The name of TooLs GmbH may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Stand-alone ISO9660 file reading package.
+ *
+ * Note: This doesn't support Rock Ridge extensions, extended attributes,
+ * blocksizes other than 2048 bytes, multi-extent files, etc.
+ */
+#include <sys/param.h>
+
+#include <lib/libkern/libkern.h>
+
+/* THIS IS AN UGLY HACK!!! XXX */
+struct fid;
+struct mbuf;
+struct nameidata;
+struct netexport { int x; };
+struct proc;
+struct statfs;
+struct ucred;
+#include <isofs/cd9660/iso.h>
+/* These once were in iso.h, but got deleted??? */
+extern __inline int
+isonum_722(p)
+ unsigned char *p;
+{
+ return ((char)*p << 8)|p[1];
+}
+
+extern __inline int
+isonum_732(p)
+ unsigned char *p;
+{
+ return (*p << 24)|(p[1] << 16)|(p[2] << 8)|p[3];
+}
+
+#include "stand.h"
+#include "cd9660.h"
+
+struct file {
+ off_t off; /* Current offset within file */
+ daddr_t bno; /* Starting block number */
+ off_t size; /* Size of file */
+};
+
+struct ptable_ent {
+ char namlen [ISODCL( 1, 1)]; /* 711 */
+ char extlen [ISODCL( 2, 2)]; /* 711 */
+ char block [ISODCL( 3, 6)]; /* 732 */
+ char parent [ISODCL( 7, 8)]; /* 722 */
+ char name [1];
+};
+#define PTFIXSZ 8
+#define PTSIZE(pp) roundup(PTFIXSZ + isonum_711((pp)->namlen), 2)
+
+#define cdb2devb(bno) ((bno) * ISO_DEFAULT_BLOCK_SIZE / DEV_BSIZE)
+
+static int
+toupper(c)
+ int c;
+{
+ return c >= 'a' && c <= 'z' ? c - 'a' + 'A' : c;
+}
+
+static int
+pnmatch(path, pp)
+ char *path;
+ struct ptable_ent *pp;
+{
+ char *cp;
+ int i;
+
+ cp = pp->name;
+ for (i = isonum_711(pp->namlen); --i >= 0; path++, cp++) {
+ if (toupper(*path) == *cp)
+ continue;
+ return 0;
+ }
+ if (*path != '/')
+ return 0;
+ return 1;
+}
+
+static int
+dirmatch(path, dp)
+ char *path;
+ struct iso_directory_record *dp;
+{
+ char *cp;
+ int i;
+
+ /* This needs to be a regular file */
+ if (dp->flags[0] & 6)
+ return 0;
+
+ cp = dp->name;
+ for (i = isonum_711(dp->name_len); --i >= 0; path++, cp++) {
+ if (!*path)
+ break;
+ if (toupper(*path) == *cp)
+ continue;
+ return 0;
+ }
+ if (*path)
+ return 0;
+ /*
+ * Allow stripping of trailing dots and the version number.
+ * Note that this will find the first instead of the last version
+ * of a file.
+ */
+ if (i >= 0 && (*cp == ';' || *cp == '.')) {
+ /* This is to prevent matching of numeric extensions */
+ if (*cp == '.' && cp[1] != ';')
+ return 0;
+ while (--i >= 0)
+ if (*++cp != ';' && (*cp < '0' || *cp > '9'))
+ return 0;
+ }
+ return 1;
+}
+
+int
+cd9660_open(path, f)
+ char *path;
+ struct open_file *f;
+{
+ struct file *fp = 0;
+ void *buf;
+ struct iso_primary_descriptor *vd;
+ size_t buf_size, read, psize, dsize;
+ daddr_t bno;
+ int parent, ent;
+ struct ptable_ent *pp;
+ struct iso_directory_record *dp;
+ int rc;
+
+ /* First find the volume descriptor */
+ buf = alloc(buf_size = ISO_DEFAULT_BLOCK_SIZE);
+ vd = buf;
+ for (bno = 16;; bno++) {
+ twiddle();
+ rc = f->f_dev->dv_strategy(f->f_devdata, F_READ, cdb2devb(bno),
+ ISO_DEFAULT_BLOCK_SIZE, buf, &read);
+ if (rc)
+ goto out;
+ if (read != ISO_DEFAULT_BLOCK_SIZE) {
+ rc = EIO;
+ goto out;
+ }
+ rc = EINVAL;
+ if (bcmp(vd->id, ISO_STANDARD_ID, sizeof vd->id) != 0)
+ goto out;
+ if (isonum_711(vd->type) == ISO_VD_END)
+ goto out;
+ if (isonum_711(vd->type) == ISO_VD_PRIMARY)
+ break;
+ }
+ if (isonum_723(vd->logical_block_size) != ISO_DEFAULT_BLOCK_SIZE)
+ goto out;
+
+ /* Now get the path table and lookup the directory of the file */
+ bno = isonum_732(vd->type_m_path_table);
+ psize = isonum_733(vd->path_table_size);
+
+ if (psize > ISO_DEFAULT_BLOCK_SIZE) {
+ free(buf, ISO_DEFAULT_BLOCK_SIZE);
+ buf = alloc(buf_size = roundup(psize, ISO_DEFAULT_BLOCK_SIZE));
+ }
+
+ twiddle();
+ rc = f->f_dev->dv_strategy(f->f_devdata, F_READ, cdb2devb(bno),
+ buf_size, buf, &read);
+ if (rc)
+ goto out;
+ if (read != buf_size) {
+ rc = EIO;
+ goto out;
+ }
+
+ parent = 1;
+ pp = (struct ptable_ent *)buf;
+ ent = 1;
+ bno = isonum_732(pp->block) + isonum_711(pp->extlen);
+
+ rc = ENOENT;
+ while (*path) {
+ if ((void *)pp >= buf + psize)
+ break;
+ if (isonum_722(pp->parent) != parent)
+ break;
+ if (!pnmatch(path, pp)) {
+ pp = (struct ptable_ent *)((void *)pp + PTSIZE(pp));
+ ent++;
+ continue;
+ }
+ path += isonum_711(pp->namlen) + 1;
+ parent = ent;
+ bno = isonum_732(pp->block) + isonum_711(pp->extlen);
+ while ((void *)pp < buf + psize) {
+ if (isonum_722(pp->parent) == parent)
+ break;
+ pp = (struct ptable_ent *)((void *)pp + PTSIZE(pp));
+ ent++;
+ }
+ }
+
+ /* Now bno has the start of the directory that supposedly contains the file */
+ bno--;
+ dsize = 1; /* Something stupid, but > 0 XXX */
+ for (psize = 0; psize < dsize;) {
+ if (!(psize % ISO_DEFAULT_BLOCK_SIZE)) {
+ bno++;
+ twiddle();
+ rc = f->f_dev->dv_strategy(f->f_devdata, F_READ,
+ cdb2devb(bno),
+ ISO_DEFAULT_BLOCK_SIZE,
+ buf, &read);
+ if (rc)
+ goto out;
+ if (read != ISO_DEFAULT_BLOCK_SIZE) {
+ rc = EIO;
+ goto out;
+ }
+ dp = (struct iso_directory_record *)buf;
+ }
+ if (!isonum_711(dp->length)) {
+ if ((void *)dp == buf)
+ psize += ISO_DEFAULT_BLOCK_SIZE;
+ else
+ psize = roundup(psize, ISO_DEFAULT_BLOCK_SIZE);
+ continue;
+ }
+ if (dsize == 1)
+ dsize = isonum_733(dp->size);
+ if (dirmatch(path, dp))
+ break;
+ psize += isonum_711(dp->length);
+ dp = (struct iso_directory_record *)((void *)dp + isonum_711(dp->length));
+ }
+
+ if (psize >= dsize) {
+ rc = ENOENT;
+ goto out;
+ }
+
+ /* allocate file system specific data structure */
+ fp = alloc(sizeof(struct file));
+ bzero(fp, sizeof(struct file));
+ f->f_fsdata = (void *)fp;
+
+ fp->off = 0;
+ fp->bno = isonum_733(dp->extent);
+ fp->size = isonum_733(dp->size);
+ free(buf, buf_size);
+
+ return 0;
+
+out:
+ if (fp)
+ free(fp, sizeof(struct file));
+ free(buf, buf_size);
+
+ return rc;
+}
+
+int
+cd9660_close(f)
+ struct open_file *f;
+{
+ struct file *fp = (struct file *)f->f_fsdata;
+
+ f->f_fsdata = 0;
+ free(fp, sizeof *fp);
+
+ return 0;
+}
+
+int
+cd9660_read(f, start, size, resid)
+ struct open_file *f;
+ void *start;
+ size_t size;
+ size_t *resid;
+{
+ struct file *fp = (struct file *)f->f_fsdata;
+ int rc = 0;
+ daddr_t bno;
+ char buf[ISO_DEFAULT_BLOCK_SIZE];
+ char *dp;
+ size_t read, off;
+
+ while (size) {
+ if (fp->off < 0 || fp->off >= fp->size)
+ break;
+ bno = fp->off / ISO_DEFAULT_BLOCK_SIZE + fp->bno;
+ if (fp->off & (ISO_DEFAULT_BLOCK_SIZE - 1)
+ || size < ISO_DEFAULT_BLOCK_SIZE)
+ dp = buf;
+ else
+ dp = start;
+ twiddle();
+ rc = f->f_dev->dv_strategy(f->f_devdata, F_READ, cdb2devb(bno),
+ ISO_DEFAULT_BLOCK_SIZE, dp, &read);
+ if (rc)
+ return rc;
+ if (read != ISO_DEFAULT_BLOCK_SIZE)
+ return EIO;
+ if (dp == buf) {
+ off = fp->off & (ISO_DEFAULT_BLOCK_SIZE - 1);
+ if (read > off + size)
+ read = off + size;
+ read -= off;
+ bcopy(buf + off, start, read);
+ start += read;
+ fp->off += read;
+ size -= read;
+ } else {
+ start += ISO_DEFAULT_BLOCK_SIZE;
+ fp->off += ISO_DEFAULT_BLOCK_SIZE;
+ size -= ISO_DEFAULT_BLOCK_SIZE;
+ }
+ }
+ if (resid)
+ *resid = size;
+ return rc;
+}
+
+int
+cd9660_write(f, start, size, resid)
+ struct open_file *f;
+ void *start;
+ size_t size;
+ size_t *resid;
+{
+ return EROFS;
+}
+
+off_t
+cd9660_seek(f, offset, where)
+ struct open_file *f;
+ off_t offset;
+ int where;
+{
+ struct file *fp = (struct file *)f->f_fsdata;
+
+ switch (where) {
+ case SEEK_SET:
+ fp->off = offset;
+ break;
+ case SEEK_CUR:
+ fp->off += offset;
+ break;
+ case SEEK_END:
+ fp->off = fp->size - offset;
+ break;
+ default:
+ return -1;
+ }
+ return fp->off;
+}
+
+int
+cd9660_stat(f, sb)
+ struct open_file *f;
+ struct stat *sb;
+{
+ struct file *fp = (struct file *)f->f_fsdata;
+
+ /* only importatn stuff */
+ sb->st_mode = S_IFREG | S_IRUSR | S_IRGRP | S_IROTH;
+ sb->st_uid = sb->st_gid = 0;
+ sb->st_size = fp->size;
+ return 0;
+}
--- /dev/null
+/* $NetBSD: cd9660.h,v 1.1 1996/09/30 16:01:20 ws Exp $ */
+
+/*
+ * Copyright (C) 1996 Wolfgang Solfrank.
+ * Copyright (C) 1996 TooLs GmbH.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by TooLs GmbH.
+ * 4. The name of TooLs GmbH may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+int cd9660_open __P((char *path, struct open_file *f));
+int cd9660_close __P((struct open_file *f));
+int cd9660_read __P((struct open_file *f, void *buf,
+ size_t size, size_t *resid));
+int cd9660_write __P((struct open_file *f, void *buf,
+ size_t size, size_t *resid));
+off_t cd9660_seek __P((struct open_file *f, off_t offset, int where));
+int cd9660_stat __P((struct open_file *f, struct stat *sb));
-/* $OpenBSD: ether.c,v 1.3 1996/10/16 14:18:36 mickey Exp $ */
-/* $NetBSD: ether.c,v 1.6 1995/09/14 23:45:25 pk Exp $ */
+/* $OpenBSD: ether.c,v 1.4 1996/12/08 15:15:49 niklas Exp $ */
+/* $NetBSD: ether.c,v 1.8 1996/10/13 02:29:00 christos Exp $ */
/*
* Copyright (c) 1992 Regents of the University of California.
#ifdef ETHER_DEBUG
if (debug)
printf("readether: not ours (ea=%s)\n",
- ether_sprintf(eh->ether_dhost));
+ ether_sprintf(eh->ether_dhost));
#endif
return (-1);
}
-/* $OpenBSD: exec.c,v 1.6 1996/10/16 13:01:23 mickey Exp $ */
-/* $NetBSD: exec.c,v 1.12.4.1 1996/06/02 12:08:48 ragge Exp $ */
+/* $OpenBSD: exec.c,v 1.7 1996/12/08 15:15:49 niklas Exp $ */
+/* $NetBSD: exec.c,v 1.15 1996/10/13 02:29:01 christos Exp $ */
/*-
* Copyright (c) 1982, 1986, 1990, 1993
-/* $OpenBSD: exit.c,v 1.2 1996/02/29 13:29:22 niklas Exp $ */
-/* $NetBSD: exit.c,v 1.8 1996/02/09 16:10:59 gwr Exp $ */
+/* $OpenBSD: exit.c,v 1.3 1996/12/08 15:15:50 niklas Exp $ */
+/* $NetBSD: exit.c,v 1.11 1996/12/01 20:22:19 pk Exp $ */
/*-
* Copyright (c) 1993 John Brezak
-/* $OpenBSD: getfile.c,v 1.2 1996/09/23 14:18:53 mickey Exp $ */
-/* $NetBSD: getfile.c,v 1.3 1994/10/26 05:44:45 cgd Exp $ */
+/* $OpenBSD: getfile.c,v 1.3 1996/12/08 15:15:50 niklas Exp $ */
+/* $NetBSD: getfile.c,v 1.6 1996/10/14 04:49:21 cgd Exp $ */
/*-
* Copyright (c) 1993
*/
#include "stand.h"
+#define CTRL(x) (x&037)
+
int
getfile(prompt, mode)
char *prompt;
do {
printf("%s: ", prompt);
gets(buf);
+ if (buf[0] == CTRL('d') && buf[1] == 0)
+ return (-1);
} while ((fd = open(buf, mode)) < 0);
return (fd);
-/* $OpenBSD: lseek.c,v 1.2 1996/09/23 14:18:56 mickey Exp $ */
-/* $NetBSD: lseek.c,v 1.2 1994/10/26 05:44:51 cgd Exp $ */
+/* $OpenBSD: lseek.c,v 1.3 1996/12/08 15:15:51 niklas Exp $ */
+/* $NetBSD: lseek.c,v 1.3 1996/06/21 20:09:03 pk Exp $ */
/*-
* Copyright (c) 1993
return (-1);
}
- /* seek is not supported on raw devices */
if (f->f_flags & F_RAW) {
- errno = EOFFSET;
- return ((off_t)-1);
+ /*
+ * On RAW devices, update internal offset.
+ */
+ switch (where) {
+ case SEEK_SET:
+ f->f_offset = offset;
+ break;
+ case SEEK_CUR:
+ f->f_offset += offset;
+ break;
+ case SEEK_END:
+ default:
+ errno = EOFFSET;
+ return (-1);
+ }
+ return (f->f_offset);
}
return (f->f_ops->seek)(f, offset, where);
-/* $OpenBSD: net.c,v 1.6 1996/10/16 14:24:08 mickey Exp $ */
-/* $NetBSD: net.c,v 1.12 1995/12/13 23:38:10 pk Exp $ */
+/* $OpenBSD: net.c,v 1.7 1996/12/08 15:15:51 niklas Exp $ */
+/* $NetBSD: net.c,v 1.14 1996/10/13 02:29:02 christos Exp $ */
/*
* Copyright (c) 1992 Regents of the University of California.
printf("sendudp: d=%x called.\n", (u_int)d);
if (d) {
printf("saddr: %s:%d",
- inet_ntoa(d->myip), ntohs(d->myport));
+ inet_ntoa(d->myip), ntohs(d->myport));
printf(" daddr: %s:%d\n",
- inet_ntoa(d->destip), ntohs(d->destport));
+ inet_ntoa(d->destip), ntohs(d->destport));
}
}
#endif
-/* $OpenBSD: netif.c,v 1.3 1996/10/29 08:44:09 mickey Exp $ */
-/* $NetBSD: netif.c,v 1.5 1995/09/18 21:19:34 pk Exp $ */
+/* $OpenBSD: netif.c,v 1.4 1996/12/08 15:15:52 niklas Exp $ */
+/* $NetBSD: netif.c,v 1.7 1996/10/13 02:29:03 christos Exp $ */
/*
* Copyright (c) 1993 Adam Glass
panic("netboot: no interfaces left untried");
if (netif_probe(nif, machdep_hint)) {
printf("netboot: couldn't probe %s%d\n",
- nif->nif_driver->netif_bname, nif->nif_unit);
+ nif->nif_driver->netif_bname, nif->nif_unit);
errno = EINVAL;
return(-1);
}
-/* $OpenBSD: nfs.c,v 1.5 1996/10/15 09:58:34 mickey Exp $ */
-/* $NetBSD: nfs.c,v 1.15 1996/05/14 10:28:26 leo Exp $ */
+/* $OpenBSD: nfs.c,v 1.6 1996/12/08 15:15:52 niklas Exp $ */
+/* $NetBSD: nfs.c,v 1.19 1996/10/13 02:29:04 christos Exp $ */
/*-
* Copyright (c) 1993 John Brezak
#include <netinet/in.h>
#include <netinet/in_systm.h>
-#include <nfs/rpcv2.h>
-#include <nfs/nfsv2.h>
+#include "rpcv2.h"
+#include "nfsv2.h"
#include "stand.h"
#include "net.h"
u_char data[NFSREAD_SIZE];
};
+struct nfs_readlnk_repl {
+ n_long errno;
+ n_long len;
+ char path[NFS_MAXPATHLEN];
+};
+
struct nfs_iodesc {
struct iodesc *iodesc;
off_t off;
return (0);
}
+/*
+ * Get the destination of a symbolic link.
+ */
+int
+nfs_readlink(d, buf)
+ struct nfs_iodesc *d;
+ char *buf;
+{
+ struct {
+ n_long h[RPC_HEADER_WORDS];
+ u_char fh[NFS_FHSIZE];
+ } sdata;
+ struct {
+ n_long h[RPC_HEADER_WORDS];
+ struct nfs_readlnk_repl d;
+ } rdata;
+ ssize_t cc;
+
+#ifdef NFS_DEBUG
+ if (debug)
+ printf("readlink: called\n");
+#endif
+
+ bcopy(d->fh, sdata.fh, NFS_FHSIZE);
+ cc = rpc_call(d->iodesc, NFS_PROG, NFS_VER2, NFSPROC_READLINK,
+ sdata.fh, NFS_FHSIZE,
+ &rdata.d, sizeof(rdata.d));
+ if (cc == -1)
+ return (errno);
+
+ if (cc < 4)
+ return (EIO);
+
+ if (rdata.d.errno)
+ return (ntohl(rdata.d.errno));
+
+ rdata.d.len = ntohl(rdata.d.len);
+ if (rdata.d.len > NFS_MAXPATHLEN)
+ return (ENAMETOOLONG);
+
+ bcopy(rdata.d.path, buf, rdata.d.len);
+ buf[rdata.d.len] = 0;
+ return (0);
+}
+
/*
* Read data from a file.
* Return transfer count or -1 (and set errno)
char *path;
struct open_file *f;
{
- struct nfs_iodesc *newfd;
+ struct nfs_iodesc *newfd, *currfd;
+ register char *cp, *ncp;
+ register int c;
+ char namebuf[NFS_MAXPATHLEN + 1];
+ char linkbuf[NFS_MAXPATHLEN + 1];
+ int nlinks = 0;
int error = 0;
#ifdef NFS_DEBUG
return (ENXIO);
}
- /* allocate file system specific data structure */
- newfd = alloc(sizeof(*newfd));
- newfd->iodesc = nfs_root_node.iodesc;
- newfd->off = 0;
+ currfd = &nfs_root_node;
+ newfd = 0;
+
+ cp = path;
+ while (*cp) {
+ /*
+ * Remove extra separators
+ */
+ while (*cp == '/')
+ cp++;
+
+ if (*cp == '\0')
+ break;
+ /*
+ * Check that current node is a directory.
+ */
+ if (currfd->fa.fa_type != htonl(NFDIR)) {
+ error = ENOTDIR;
+ goto out;
+ }
+
+ /* allocate file system specific data structure */
+ newfd = alloc(sizeof(*newfd));
+ newfd->iodesc = currfd->iodesc;
+ newfd->off = 0;
+
+ /*
+ * Get next component of path name.
+ */
+ {
+ register int len = 0;
+
+ ncp = cp;
+ while ((c = *cp) != '\0' && c != '/') {
+ if (++len > NFS_MAXNAMLEN) {
+ error = ENOENT;
+ goto out;
+ }
+ cp++;
+ }
+ *cp = '\0';
+ }
+
+ /* lookup a file handle */
+ error = nfs_lookupfh(currfd, ncp, newfd);
+ *cp = c;
+ if (error)
+ goto out;
+
+ /*
+ * Check for symbolic link
+ */
+ if (newfd->fa.fa_type == htonl(NFLNK)) {
+ int link_len, len;
+
+ error = nfs_readlink(newfd, linkbuf);
+ if (error)
+ goto out;
+
+ link_len = strlen(linkbuf);
+ len = strlen(cp);
+
+ if (link_len + len > MAXPATHLEN
+ || ++nlinks > MAXSYMLINKS) {
+ error = ENOENT;
+ goto out;
+ }
+
+ bcopy(cp, &namebuf[link_len], len + 1);
+ bcopy(linkbuf, namebuf, link_len);
+
+ /*
+ * If absolute pathname, restart at root.
+ * If relative pathname, restart at parent directory.
+ */
+ cp = namebuf;
+ if (*cp == '/') {
+ if (currfd != &nfs_root_node)
+ free(currfd, sizeof(*currfd));
+ currfd = &nfs_root_node;
+ }
+
+ free(newfd, sizeof(*newfd));
+ newfd = 0;
+
+ continue;
+ }
+
+ if (currfd != &nfs_root_node)
+ free(currfd, sizeof(*currfd));
+ currfd = newfd;
+ newfd = 0;
+ }
+
+ error = 0;
- /* lookup a file handle */
- error = nfs_lookupfh(&nfs_root_node, path, newfd);
+out:
if (!error) {
- f->f_fsdata = (void *)newfd;
+ f->f_fsdata = (void *)currfd;
return (0);
}
-
+
#ifdef NFS_DEBUG
if (debug)
printf("nfs_open: %s lookupfh failed: %s\n",
- path, strerror(error));
+ path, strerror(error));
#endif
- free(newfd, sizeof(*newfd));
+ if (currfd != &nfs_root_node)
+ free(currfd, sizeof(*currfd));
+ if (newfd)
+ free(newfd, sizeof(*newfd));
+
return (error);
}
-/* $OpenBSD: nfs.h,v 1.4 1996/11/27 19:52:23 niklas Exp $ */
-/* $NetBSD: nfs.h,v 1.4 1995/09/18 21:19:39 pk Exp $ */
+/* $OpenBSD: nfs.h,v 1.5 1996/12/08 15:15:53 niklas Exp $ */
+/* $NetBSD: nfs.h,v 1.5 1996/07/10 18:32:33 cgd Exp $ */
/*-
* Copyright (c) 1993
--- /dev/null
+/* $NetBSD: nfsv2.h,v 1.2 1996/02/26 23:05:23 gwr Exp $ */
+
+/*
+ * Copyright (c) 1989, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Rick Macklem at The University of Guelph.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)nfsv2.h 8.1 (Berkeley) 6/10/93
+ */
+
+/*
+ * nfs definitions as per the version 2 specs
+ */
+
+/*
+ * Constants as defined in the Sun NFS Version 2 spec.
+ * "NFS: Network File System Protocol Specification" RFC1094
+ */
+
+#define NFS_PORT 2049
+#define NFS_PROG 100003
+#define NFS_VER2 2
+#define NFS_MAXDGRAMDATA 8192
+#define NFS_MAXDATA 32768
+#define NFS_MAXPATHLEN 1024
+#define NFS_MAXNAMLEN 255
+#define NFS_FHSIZE 32
+#define NFS_MAXPKTHDR 404
+#define NFS_MAXPACKET (NFS_MAXPKTHDR+NFS_MAXDATA)
+#define NFS_MINPACKET 20
+#define NFS_FABLKSIZE 512 /* Size in bytes of a block wrt fa_blocks */
+
+/* Stat numbers for rpc returns */
+#define NFS_OK 0
+#define NFSERR_PERM 1
+#define NFSERR_NOENT 2
+#define NFSERR_IO 5
+#define NFSERR_NXIO 6
+#define NFSERR_ACCES 13
+#define NFSERR_EXIST 17
+#define NFSERR_NODEV 19
+#define NFSERR_NOTDIR 20
+#define NFSERR_ISDIR 21
+#define NFSERR_FBIG 27
+#define NFSERR_NOSPC 28
+#define NFSERR_ROFS 30
+#define NFSERR_NAMETOL 63
+#define NFSERR_NOTEMPTY 66
+#define NFSERR_DQUOT 69
+#define NFSERR_STALE 70
+#define NFSERR_WFLUSH 99
+
+/* Sizes in bytes of various nfs rpc components */
+#define NFSX_FH 32
+#define NFSX_UNSIGNED 4
+#define NFSX_FATTR 68
+#define NFSX_SATTR 32
+#define NFSX_STATFS 20
+#define NFSX_COOKIE 4
+
+/* nfs rpc procedure numbers */
+#define NFSPROC_NULL 0
+#define NFSPROC_GETATTR 1
+#define NFSPROC_SETATTR 2
+#define NFSPROC_NOOP 3
+#define NFSPROC_ROOT NFSPROC_NOOP /* Obsolete */
+#define NFSPROC_LOOKUP 4
+#define NFSPROC_READLINK 5
+#define NFSPROC_READ 6
+#define NFSPROC_WRITECACHE NFSPROC_NOOP /* Obsolete */
+#define NFSPROC_WRITE 8
+#define NFSPROC_CREATE 9
+#define NFSPROC_REMOVE 10
+#define NFSPROC_RENAME 11
+#define NFSPROC_LINK 12
+#define NFSPROC_SYMLINK 13
+#define NFSPROC_MKDIR 14
+#define NFSPROC_RMDIR 15
+#define NFSPROC_READDIR 16
+#define NFSPROC_STATFS 17
+
+#define NFS_NPROCS 18
+
+
+/* File types */
+typedef enum {
+ NFNON=0,
+ NFREG=1,
+ NFDIR=2,
+ NFBLK=3,
+ NFCHR=4,
+ NFLNK=5
+} nfstype;
+
+/* Structs for common parts of the rpc's */
+struct nfsv2_time {
+ n_long nfs_sec;
+ n_long nfs_usec;
+};
+
+/*
+ * File attributes and setable attributes.
+ */
+struct nfsv2_fattr {
+ n_long fa_type;
+ n_long fa_mode;
+ n_long fa_nlink;
+ n_long fa_uid;
+ n_long fa_gid;
+ n_long fa_size;
+ n_long fa_blocksize;
+ n_long fa_rdev;
+ n_long fa_blocks;
+ n_long fa_fsid;
+ n_long fa_fileid;
+ struct nfsv2_time fa_atime;
+ struct nfsv2_time fa_mtime;
+ struct nfsv2_time fa_ctime;
+};
+
+struct nfsv2_sattr {
+ n_long sa_mode;
+ n_long sa_uid;
+ n_long sa_gid;
+ n_long sa_size;
+ struct nfsv2_time sa_atime;
+ struct nfsv2_time sa_mtime;
+};
+
+struct nfsv2_statfs {
+ n_long sf_tsize;
+ n_long sf_bsize;
+ n_long sf_blocks;
+ n_long sf_bfree;
+ n_long sf_bavail;
+};
-/* $OpenBSD: open.c,v 1.4 1996/09/23 14:19:01 mickey Exp $ */
-/* $NetBSD: open.c,v 1.10 1996/01/13 22:25:41 leo Exp $ */
+/* $OpenBSD: open.c,v 1.5 1996/12/08 15:15:54 niklas Exp $ */
+/* $NetBSD: open.c,v 1.12 1996/09/30 16:01:21 ws Exp $ */
/*-
* Copyright (c) 1993
/* see if we opened a raw device; otherwise, 'file' is the file name. */
if (file == (char *)0 || *file == '\0') {
f->f_flags |= F_RAW;
- return (0);
+ return (fd);
}
/* pass file name to the different filesystem open routines */
if (!error)
error = ENOENT;
+ f->f_dev->dv_close(f);
err:
f->f_flags = 0;
errno = error;
-/* $OpenBSD: printf.c,v 1.5 1996/10/29 07:47:48 mickey Exp $ */
-/* $NetBSD: printf.c,v 1.7 1996/02/08 20:19:36 gwr Exp $ */
+/* $OpenBSD: printf.c,v 1.6 1996/12/08 15:15:54 niklas Exp $ */
+/* $NetBSD: printf.c,v 1.10 1996/11/30 04:19:21 gwr Exp $ */
/*-
* Copyright (c) 1993
#include "stand.h"
static void kprintn __P((void (*)(int), u_long, int));
-static void kprintf __P((void (*)(int), const char *, va_list));
+static void kdoprnt __P((void (*)(int), const char *, va_list));
#ifndef STRIPPED
static void sputchar __P((int));
#else
va_start(ap);
#endif
- kprintf(sputchar, fmt, ap);
+ kdoprnt(sputchar, fmt, ap);
va_end(ap);
*sbuf = '\0';
}
#else
va_start(ap);
#endif
- kprintf(putchar, fmt, ap);
+ kdoprnt(putchar, fmt, ap);
va_end(ap);
}
void
vprintf(const char *fmt, va_list ap)
{
- kprintf(putchar, fmt, ap);
+ kdoprnt(putchar, fmt, ap);
}
static void
-kprintf(put, fmt, ap)
+kdoprnt(put, fmt, ap)
void (*put)__P((int));
const char *fmt;
va_list ap;
-/* $OpenBSD: rarp.c,v 1.4 1996/10/16 14:26:46 mickey Exp $ */
-/* $NetBSD: rarp.c,v 1.10 1995/09/23 03:36:10 gwr Exp $ */
+/* $OpenBSD: rarp.c,v 1.5 1996/12/08 15:15:55 niklas Exp $ */
+/* $NetBSD: rarp.c,v 1.13 1996/10/13 02:29:05 christos Exp $ */
/*
* Copyright (c) 1992 Regents of the University of California.
-/* $OpenBSD: read.c,v 1.2 1996/09/23 14:19:02 mickey Exp $ */
-/* $NetBSD: read.c,v 1.5 1995/09/14 23:45:35 pk Exp $ */
+/* $OpenBSD: read.c,v 1.3 1996/12/08 15:15:55 niklas Exp $ */
+/* $NetBSD: read.c,v 1.7 1996/06/21 20:29:28 pk Exp $ */
/*-
* Copyright (c) 1993
* rights to redistribute these changes.
*/
+#include <sys/param.h>
#include "stand.h"
ssize_t
if (f->f_flags & F_RAW) {
twiddle();
errno = (f->f_dev->dv_strategy)(f->f_devdata, F_READ,
- (daddr_t)0, bcount, dest, &resid);
+ btodb(f->f_offset), bcount, dest, &resid);
if (errno)
return (-1);
+ f->f_offset += resid;
return (resid);
}
resid = bcount;
-/* $OpenBSD: rpc.c,v 1.6 1996/11/27 19:52:25 niklas Exp $ */
-/* $NetBSD: rpc.c,v 1.12 1996/02/26 23:05:26 gwr Exp $ */
+/* $OpenBSD: rpc.c,v 1.7 1996/12/08 15:15:56 niklas Exp $ */
+/* $NetBSD: rpc.c,v 1.16 1996/10/13 02:29:06 christos Exp $ */
/*
* Copyright (c) 1992 Regents of the University of California.
#ifdef RPC_DEBUG
if (debug)
printf("rpc_call: prog=0x%x vers=%d proc=%d\n",
- prog, vers, proc);
+ prog, vers, proc);
#endif
port = rpc_getport(d, prog, vers);
{
register struct rpc_reply *reply;
ssize_t n;
- long x;
+ int x;
errno = 0;
#ifdef RPC_DEBUG
int rpc_pmap_num;
struct pmap_list {
struct in_addr addr; /* server, net order */
- u_long prog; /* host order */
- u_long vers; /* host order */
+ u_int prog; /* host order */
+ u_int vers; /* host order */
int port; /* host order */
} rpc_pmap_list[PMAP_NUM];
int
rpc_pmap_getcache(addr, prog, vers)
struct in_addr addr; /* server, net order */
- u_long prog; /* host order */
- u_long vers; /* host order */
+ u_int prog; /* host order */
+ u_int vers; /* host order */
{
struct pmap_list *pl;
void
rpc_pmap_putcache(addr, prog, vers, port)
struct in_addr addr; /* server, net order */
- u_long prog; /* host order */
- u_long vers; /* host order */
+ u_int prog; /* host order */
+ u_int vers; /* host order */
int port; /* host order */
{
struct pmap_list *pl;
-/* $OpenBSD: rpc.h,v 1.2 1996/09/23 14:19:03 mickey Exp $ */
-/* $NetBSD: rpc.h,v 1.7 1995/09/23 03:36:12 gwr Exp $ */
+/* $OpenBSD: rpc.h,v 1.3 1996/12/08 15:15:56 niklas Exp $ */
+/* $NetBSD: rpc.h,v 1.8 1996/09/26 23:22:03 cgd Exp $ */
/*
* Copyright (c) 1992 Regents of the University of California.
ssize_t rpc_call __P((struct iodesc *, n_long, n_long, n_long,
void *, size_t, void *, size_t));
void rpc_fromaddr __P((void *, struct in_addr *, u_short *));
-int rpc_pmap_getcache __P((struct in_addr, u_long, u_long));
-void rpc_pmap_putcache __P((struct in_addr, u_long, u_long, int));
+int rpc_pmap_getcache __P((struct in_addr, u_int, u_int));
+void rpc_pmap_putcache __P((struct in_addr, u_int, u_int, int));
extern int rpc_port; /* decrement before bind */
--- /dev/null
+/* $NetBSD: rpcv2.h,v 1.1 1996/02/26 23:05:32 gwr Exp $ */
+
+/*
+ * Copyright (c) 1989, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Rick Macklem at The University of Guelph.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)rpcv2.h 8.1 (Berkeley) 6/10/93
+ */
+
+/*
+ * Definitions for Sun RPC Version 2, from
+ * "RPC: Remote Procedure Call Protocol Specification" RFC1057
+ */
+
+/* Version # */
+#define RPC_VER2 2
+
+/* Authentication */
+#define RPCAUTH_NULL 0
+#define RPCAUTH_UNIX 1
+#define RPCAUTH_SHORT 2
+#define RPCAUTH_MAXSIZ 400
+#define RPCAUTH_UNIXGIDS 16
+
+/* Rpc Constants */
+#define RPC_CALL 0
+#define RPC_REPLY 1
+#define RPC_MSGACCEPTED 0
+#define RPC_MSGDENIED 1
+#define RPC_PROGUNAVAIL 1
+#define RPC_PROGMISMATCH 2
+#define RPC_PROCUNAVAIL 3
+#define RPC_GARBAGE 4 /* I like this one */
+#define RPC_MISMATCH 0
+#define RPC_AUTHERR 1
+
+/* Authentication failures */
+#define AUTH_BADCRED 1
+#define AUTH_REJECTCRED 2
+#define AUTH_BADVERF 3
+#define AUTH_REJECTVERF 4
+#define AUTH_TOOWEAK 5 /* Give em wheaties */
+
+/* Sizes of rpc header parts */
+#define RPC_SIZ 24
+#define RPC_REPLYSIZ 28
+
+/* RPC Prog definitions */
+#define RPCPROG_MNT 100005
+#define RPCMNT_VER1 1
+#define RPCMNT_MOUNT 1
+#define RPCMNT_DUMP 2
+#define RPCMNT_UMOUNT 3
+#define RPCMNT_UMNTALL 4
+#define RPCMNT_EXPORT 5
+#define RPCMNT_NAMELEN 255
+#define RPCMNT_PATHLEN 1024
+#define RPCPROG_NFS 100003
-/* $OpenBSD: stand.h,v 1.14 1996/11/27 11:59:43 mickey Exp $ */
-/* $NetBSD: stand.h,v 1.13 1996/01/13 22:25:42 leo Exp $ */
+/* $OpenBSD: stand.h,v 1.15 1996/12/08 15:15:57 niklas Exp $ */
+/* $NetBSD: stand.h,v 1.18 1996/11/30 04:35:51 gwr Exp $ */
/*-
* Copyright (c) 1993
void *f_devdata; /* device specific data */
struct fs_ops *f_ops; /* pointer to file system operations */
void *f_fsdata; /* file system specific data */
+ off_t f_offset; /* current file offset (F_RAW) */
};
#define SOPEN_MAX 4
void printf __P((const char *, ...));
void sprintf __P((char *, const char *, ...));
-void vprintf __P((const char *format, va_list ap));
+void vprintf __P((const char *, _BSD_VA_LIST_));
void twiddle __P((void));
void gets __P((char *));
__dead void panic __P((const char *, ...)) __attribute__((noreturn));
-/* $OpenBSD: strerror.c,v 1.3 1996/09/23 14:19:05 mickey Exp $ */
-/* $NetBSD: strerror.c,v 1.8 1995/09/17 00:49:47 pk Exp $ */
+/* $OpenBSD: strerror.c,v 1.4 1996/12/08 15:15:58 niklas Exp $ */
+/* $NetBSD: strerror.c,v 1.11 1996/10/13 02:29:08 christos Exp $ */
/*-
* Copyright (c) 1993
-/* $OpenBSD: ufs.c,v 1.7 1996/10/16 14:02:55 mickey Exp $ */
-/* $NetBSD: ufs.c,v 1.14.4.1 1996/06/02 12:08:45 ragge Exp $ */
+/* $OpenBSD: ufs.c,v 1.8 1996/12/08 15:15:58 niklas Exp $ */
+/* $NetBSD: ufs.c,v 1.16 1996/09/30 16:01:22 ws Exp $ */
/*-
* Copyright (c) 1993
out:
if (buf)
free(buf, fs->fs_bsize);
- if (rc)
+ if (rc) {
+ free(fp->f_fs, SBSIZE);
free(fp, sizeof(struct file));
+ }
return (rc);
}
-/* $OpenBSD: write.c,v 1.2 1996/09/23 14:19:07 mickey Exp $ */
-/* $NetBSD: write.c,v 1.5 1995/09/14 23:45:41 pk Exp $ */
+/* $OpenBSD: write.c,v 1.3 1996/12/08 15:15:59 niklas Exp $ */
+/* $NetBSD: write.c,v 1.7 1996/06/21 20:29:30 pk Exp $ */
/*-
* Copyright (c) 1993
* rights to redistribute these changes.
*/
+#include <sys/param.h>
#include "stand.h"
ssize_t
if (f->f_flags & F_RAW) {
twiddle();
errno = (f->f_dev->dv_strategy)(f->f_devdata, F_WRITE,
- (daddr_t)0, bcount, dest, &resid);
+ btodb(f->f_offset), bcount, dest, &resid);
if (errno)
return (-1);
+ f->f_offset += resid;
return (resid);
}
resid = bcount;