~cfuhrman/+junk/netbsd-othersrc-trunk

« back to all changes in this revision

Viewing changes to usr.bin/mkfifo/mkfifo.c

  • Committer: stacktic
  • Date: 2009-03-23 21:04:00 UTC
  • Revision ID: svn-v4:288d5a72-fed7-e111-8680-000c29dcf8fe:trunk:1946
ImportedĀ fs-utilsĀ binaries

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*      $NetBSD$        */
 
2
/* from src/usr.bin/mkfifo/mkfifo.c */
 
3
/*      NetBSD: mkfifo.c,v 1.12 2008/07/21 14:19:24 lukem Exp   */
 
4
 
 
5
/*
 
6
 * Copyright (c) 1990, 1993
 
7
 *      The Regents of the University of California.  All rights reserved.
 
8
 *
 
9
 * Redistribution and use in source and binary forms, with or without
 
10
 * modification, are permitted provided that the following conditions
 
11
 * are met:
 
12
 * 1. Redistributions of source code must retain the above copyright
 
13
 *    notice, this list of conditions and the following disclaimer.
 
14
 * 2. Redistributions in binary form must reproduce the above copyright
 
15
 *    notice, this list of conditions and the following disclaimer in the
 
16
 *    documentation and/or other materials provided with the distribution.
 
17
 * 3. Neither the name of the University nor the names of its contributors
 
18
 *    may be used to endorse or promote products derived from this software
 
19
 *    without specific prior written permission.
 
20
 *
 
21
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 
22
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 
23
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 
24
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 
25
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 
26
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 
27
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 
28
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 
29
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 
30
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 
31
 * SUCH DAMAGE.
 
32
 */
 
33
 
 
34
#include <sys/cdefs.h>
 
35
#ifndef lint
 
36
__COPYRIGHT("@(#) Copyright (c) 1990, 1993\
 
37
 The Regents of the University of California.  All rights reserved.");
 
38
#endif /* not lint */
 
39
 
 
40
#ifndef lint
 
41
#if 0
 
42
static char sccsid[] = "@(#)mkfifo.c    8.2 (Berkeley) 1/5/94";
 
43
#endif
 
44
__RCSID("$NetBSD: mkfifo.c,v 1.12 2008/07/21 14:19:24 lukem Exp $");
 
45
#endif /* not lint */
 
46
 
 
47
#include <stdio.h>
 
48
#include <stdlib.h>
 
49
#include <string.h>
 
50
#include <locale.h>
 
51
#include <errno.h>
 
52
#include <sys/types.h>
 
53
#include <sys/stat.h>
 
54
#include <unistd.h>
 
55
#include <err.h>
 
56
 
 
57
#ifdef USE_UKFS
 
58
#include <rump/ukfs.h>
 
59
 
 
60
#include <fsu_mount.h>
 
61
 
 
62
#define mkfifo(a, b) ukfs_mkfifo(ukfs, a, b)
 
63
 
 
64
DECLARE_UKFS(ukfs)
 
65
#endif /* USE_UKFS */
 
66
 
 
67
int             main __P((int, char **));
 
68
 
 
69
static void usage __P((void));
 
70
 
 
71
int
 
72
main(int argc, char *argv[])
 
73
{
 
74
        int ch, exitval;
 
75
        void *set;
 
76
        mode_t mode;
 
77
 
 
78
        setprogname(argv[0]);
 
79
        setlocale (LC_ALL, "");
 
80
 
 
81
#ifdef USE_UKFS
 
82
        FSU_MOUNT(argc, argv, ukfs);
 
83
#endif
 
84
 
 
85
        /* The default mode is the value of the bitwise inclusive or of
 
86
           S_IRUSR, S_IWUSR, S_IRGRP, S_IWGRP, S_IROTH, and S_IWOTH
 
87
           modified by the file creation mask */
 
88
        mode = 0666 & ~umask(0);
 
89
 
 
90
        while ((ch = getopt(argc, argv, "m:")) != -1)
 
91
                switch(ch) {
 
92
                case 'm':
 
93
                        if (!(set = setmode(optarg))) {
 
94
                                err(1, "Cannot set file mode `%s'", optarg);
 
95
                                /* NOTREACHED */
 
96
                        }
 
97
                        /* In symbolic mode strings, the + and - operators are
 
98
                           interpreted relative to an assumed initial mode of
 
99
                           a=rw. */
 
100
                        mode = getmode(set, 0666);
 
101
                        free(set);
 
102
                        break;
 
103
                case '?':
 
104
                default:
 
105
                        usage();
 
106
                }
 
107
        argc -= optind;
 
108
        argv += optind;
 
109
        if (argv[0] == NULL)
 
110
                usage();
 
111
 
 
112
        for (exitval = 0; *argv; ++argv) {
 
113
                if (mkfifo(*argv, mode) < 0) {
 
114
                        warn("%s", *argv);
 
115
                        exitval = 1;
 
116
                }
 
117
        }
 
118
        exit(exitval);
 
119
}
 
120
 
 
121
void
 
122
usage()
 
123
{
 
124
 
 
125
#ifdef USE_UKFS
 
126
        (void)fprintf(stderr, "usage: %s %s [-m mode] fifoname ...\n",
 
127
                      getprogname(), fsu_mount_usage());
 
128
#else
 
129
        (void)fprintf(stderr, "usage: %s [-m mode] fifoname ...\n",
 
130
                      getprogname());
 
131
#endif /* USE_UKFS */
 
132
 
 
133
        exit(1);
 
134
}