Annotation of src/usr.bin/ranlib/misc.c, Revision 1.1.1.1
1.1 deraadt 1: /*-
2: * Copyright (c) 1990 The Regents of the University of California.
3: * All rights reserved.
4: *
5: * This code is derived from software contributed to Berkeley by
6: * Hugh Smith at The University of Guelph.
7: *
8: * Redistribution and use in source and binary forms, with or without
9: * modification, are permitted provided that the following conditions
10: * are met:
11: * 1. Redistributions of source code must retain the above copyright
12: * notice, this list of conditions and the following disclaimer.
13: * 2. Redistributions in binary form must reproduce the above copyright
14: * notice, this list of conditions and the following disclaimer in the
15: * documentation and/or other materials provided with the distribution.
16: * 3. All advertising materials mentioning features or use of this software
17: * must display the following acknowledgement:
18: * This product includes software developed by the University of
19: * California, Berkeley and its contributors.
20: * 4. Neither the name of the University nor the names of its contributors
21: * may be used to endorse or promote products derived from this software
22: * without specific prior written permission.
23: *
24: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34: * SUCH DAMAGE.
35: */
36:
37: #ifndef lint
38: /*static char sccsid[] = "from: @(#)misc.c 5.2 (Berkeley) 2/26/91";*/
39: static char rcsid[] = "$Id: misc.c,v 1.5 1995/06/27 00:28:40 jtc Exp $";
40: #endif /* not lint */
41:
42: #include <sys/param.h>
43: #include <signal.h>
44: #include <errno.h>
45: #include <unistd.h>
46: #include <stdio.h>
47: #include <stdlib.h>
48: #include <string.h>
49: #include "pathnames.h"
50:
51: extern char *archive; /* archive name */
52: char *tname = "temporary file";
53:
54: tmp()
55: {
56: static char *envtmp;
57: sigset_t set, oset;
58: static int first;
59: int fd;
60: char path[MAXPATHLEN];
61:
62: if (!first) {
63: envtmp = getenv("TMPDIR");
64: first = 1;
65: }
66:
67: if (envtmp)
68: (void)snprintf(path, MAXPATHLEN, "%s/%s", envtmp, _NAME_RANTMP);
69: else
70: bcopy(_PATH_RANTMP, path, sizeof(_PATH_RANTMP));
71:
72: sigemptyset(&set);
73: sigaddset(&set, SIGHUP);
74: sigaddset(&set, SIGINT);
75: sigaddset(&set, SIGQUIT);
76: sigaddset(&set, SIGTERM);
77: (void)sigprocmask(SIG_BLOCK, &set, &oset);
78: if ((fd = mkstemp(path)) == -1)
79: error(tname);
80: (void)unlink(path);
81: (void)sigprocmask(SIG_SETMASK, &oset, (sigset_t *)NULL);
82: return(fd);
83: }
84:
85: void *
86: emalloc(len)
87: int len;
88: {
89: char *p;
90:
91: if (!(p = malloc((u_int)len)))
92: error(archive);
93: return(p);
94: }
95:
96: char *
97: rname(path)
98: char *path;
99: {
100: register char *ind;
101:
102: return((ind = rindex(path, '/')) ? ind + 1 : path);
103: }
104:
105: badfmt()
106: {
107: errno = EFTYPE;
108: error(archive);
109: }
110:
111: error(name)
112: char *name;
113: {
114: (void)fprintf(stderr, "ranlib: %s: %s\n", name, strerror(errno));
115: exit(1);
116: }