Browse Source

Add opendev(3) to libutil. Used by mt(1), soon by disklabel(8), maybe

others.  This is a generic version of the code used by mt(1).
OPENBSD_2_0
downsj 28 years ago
parent
commit
f8971d632f
3 changed files with 142 additions and 5 deletions
  1. +11
    -5
      src/lib/libutil/Makefile
  2. +86
    -0
      src/lib/libutil/opendev.c
  3. +45
    -0
      src/lib/libutil/opendev.h

+ 11
- 5
src/lib/libutil/Makefile View File

@ -1,10 +1,12 @@
# $OpenBSD: Makefile,v 1.3 1996/06/12 11:21:32 deraadt Exp $
# $OpenBSD: Makefile,v 1.4 1996/06/17 06:35:32 downsj Exp $
# $NetBSD: Makefile,v 1.8 1996/05/16 07:03:28 thorpej Exp $ # $NetBSD: Makefile,v 1.8 1996/05/16 07:03:28 thorpej Exp $
LIB= util LIB= util
CFLAGS+=-DLIBC_SCCS CFLAGS+=-DLIBC_SCCS
HDRS= opendev.h scsi.h
SRCS= getmaxpartitions.c getrawpartition.c login.c login_tty.c logout.c \ SRCS= getmaxpartitions.c getrawpartition.c login.c login_tty.c logout.c \
logwtmp.c passwd.c pty.c scsi.c
logwtmp.c opendev.c passwd.c pty.c scsi.c
MAN= getmaxpartitions.3 getrawpartition.3 login.3 openpty.3 pw_init.3 \ MAN= getmaxpartitions.3 getrawpartition.3 login.3 openpty.3 pw_init.3 \
pw_lock.3 scsi.3 pw_lock.3 scsi.3
@ -33,8 +35,12 @@ MLINKS+=scsi.3 scsi_debug.3
MLINKS+=scsi.3 scsi_debug_output.3 MLINKS+=scsi.3 scsi_debug_output.3
includes: includes:
-cd ${.CURDIR}; cmp -s scsi.h ${DESTDIR}/usr/include/scsi.h || \
install -c -o ${BINOWN} -g ${BINGRP} -m 444 scsi.h \
${DESTDIR}/usr/include
@cd ${.CURDIR}; for i in $(HDRS); do \
j="cmp -s $$i ${DESTDIR}/usr/include/$$i || \
install -c -o ${BINOWN} -g ${BINGRP} -m 444 $$i \
${DESTDIR}/usr/include"; \
echo $$j; \
eval "$$j"; \
done
.include <bsd.lib.mk> .include <bsd.lib.mk>

+ 86
- 0
src/lib/libutil/opendev.c View File

@ -0,0 +1,86 @@
/* $OpenBSD: opendev.c,v 1.1 1996/06/17 06:35:34 downsj Exp $ */
/*
* Copyright (c) 1996, Jason Downs. 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.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``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 AUTHOR(S) 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.
*/
#include <stdio.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/disklabel.h>
#include <paths.h>
#include "opendev.h"
/*
* This routine is a generic rewrite of the original code found in
* disklabel(8).
*/
int
opendev(path, oflags, dflags, mode, realpath)
char *path;
int oflags;
int dflags;
mode_t mode;
char **realpath;
{
int fd;
static char namebuf[256];
*realpath = path;
fd = open(path, oflags, mode);
if ((fd < 0) && (errno == ENOENT)) {
if (path[0] != '/') {
if (dflags & OPENDEV_PART) {
/*
* First try raw partition (for removable
* drives)
*/
(void)snprintf(namebuf, sizeof(namebuf),
"%sr%s%c", _PATH_DEV, path, 'a' + RAW_PART);
fd = open(namebuf, oflags, mode);
}
if ((dflags & OPENDEV_DRCT) && (fd < 0) &&
(errno == ENOENT)) {
/* ..and now no partition (for tapes) */
namebuf[strlen(namebuf) - 1] = '\0';
fd = open(namebuf, oflags, mode);
}
*realpath = namebuf;
}
}
if ((fd < 0) && (errno == ENOENT) && (path[0] != '/')) {
(void)snprintf(namebuf, sizeof(namebuf), "%sr%s",
_PATH_DEV, path);
fd = open(namebuf, oflags, mode);
*realpath = namebuf;
}
return (fd);
}

+ 45
- 0
src/lib/libutil/opendev.h View File

@ -0,0 +1,45 @@
/* $OpenBSD: opendev.h,v 1.1 1996/06/17 06:35:34 downsj Exp $ */
/*
* Copyright (c) 1996, Jason Downs. 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.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``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 AUTHOR(S) 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.
*/
#ifndef _OPENDEV_H_
#define _OPENDEV_H_
#include <sys/types.h>
/*
* opendev() specific operation flags.
*/
#define OPENDEV_PART 0x01 /* Try to open the raw partition. */
#define OPENDEV_DRCT 0x02 /* Try to open the device directly. */
#include <sys/cdefs.h>
__BEGIN_DECLS
int opendev __P((char *, int, int, mode_t, char **));
__END_DECLS
#endif /* _OPENDEV_H_ */

Loading…
Cancel
Save