1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
23 /* All Rights Reserved */
24
25 #include "mail.h"
26 /*
27 Generic open routine.
28 Exits on error with passed error value.
29 Returns file pointer on success.
30
31 Note: This should be used only for critical files
32 as it will terminate mail(1) on failure.
33 */
34 FILE *
doopen(char * file,char * type,int errnum)35 doopen(char *file, char *type, int errnum)
36 {
37 static char pn[] = "doopen";
38 FILE *fptr;
39 struct stat st;
40
41 if ((stat(file, &st) < 0 && errno == EOVERFLOW) ||
42 (fptr = fopen(file, type)) == NULL) {
43 fprintf(stderr,
44 "%s: Can't open '%s' type: %s\n",program,file,type);
45 error = errnum;
46 sav_errno = errno;
47 Dout(pn, 0, "can't open '%s' type: %s\n",program,file,type);
48 Dout(pn, 0, "error set to %d\n", error);
49 done(0);
50 }
51 return(fptr);
52 }
53