1 # include	"errno.h"
2 # include	"../hdr/macros.h"
3 SCCSID(@(#)xmsg	2.1);
4 /*
5 	Call fatal with an appropriate error message
6 	based on errno.  If no good message can be made up, it makes
7 	up a simple message.
8 	The second argument is a pointer to the calling functions
9 	name (a string); it's used in the manufactured message.
10 */
11 
12 
13 xmsg(file,func)
14 char *file, *func;
15 {
16 	register char *str;
17 	extern int errno;
18 	extern char Error[];
19 
20 	switch (errno) {
21 	case ENFILE:
22 		str = "no file (ut3)";
23 		break;
24 	case ENOENT:
25 		sprintf(str = Error,"`%s' nonexistent (ut4)",file);
26 		break;
27 	case EACCES:
28 		str = malloc(size(file));
29 		copy(file,str);
30 		file = str;
31 		sprintf(str = Error,"directory `%s' unwritable (ut2)",
32 			dname(file));
33 		break;
34 	case ENOSPC:
35 		str = "no space! (ut10)";
36 		break;
37 	case EFBIG:
38 		str = "write error (ut8)";
39 		break;
40 	default:
41 		sprintf(str = Error,"errno = %d, function = `%s' (ut11)",errno,
42 			func);
43 		break;
44 	}
45 	return(fatal(str));
46 }
47