1 /***********************************************************************
2 *                                                                      *
3 *               This software is part of the ast package               *
4 *          Copyright (c) 1985-2011 AT&T Intellectual Property          *
5 *                      and is licensed under the                       *
6 *                 Eclipse Public License, Version 1.0                  *
7 *                    by AT&T Intellectual Property                     *
8 *                                                                      *
9 *                A copy of the License is available at                 *
10 *          http://www.eclipse.org/org/documents/epl-v10.html           *
11 *         (with md5 checksum b35adb5213ca9657e911e9befb180842)         *
12 *                                                                      *
13 *              Information and Software Systems Research               *
14 *                            AT&T Research                             *
15 *                           Florham Park NJ                            *
16 *                                                                      *
17 *                 Glenn Fowler <gsf@research.att.com>                  *
18 *                  David Korn <dgk@research.att.com>                   *
19 *                   Phong Vo <kpv@research.att.com>                    *
20 *                                                                      *
21 ***********************************************************************/
22 #include "FEATURE/uwin"
23 
24 #if !_UWIN
25 
_STUB_err()26 void _STUB_err(){}
27 
28 #else
29 
30 #pragma prototyped
31 
32 /*
33  * bsd 4.4 compatibility
34  *
35  * NOTE: errorv(ERROR_NOID) => the first arg is the printf format
36  */
37 
38 #include <ast.h>
39 #include <error.h>
40 
41 #include <windows.h>
42 
43 #ifdef __EXPORT__
44 #define extern	__EXPORT__
45 #endif
46 
47 static void
errmsg(int level,int code,const char * fmt,va_list ap)48 errmsg(int level, int code, const char* fmt, va_list ap)
49 {
50 	if (!error_info.id)
51 	{
52 		struct _astdll*	dp = _ast_getdll();
53 		char*		s;
54 		char*		t;
55 
56 		if (s = dp->_ast__argv[0])
57 		{
58 			if (t = strrchr(s, '/'))
59 				s = t + 1;
60 			error_info.id = s;
61 		}
62 	}
63 	errorv(fmt, level|ERROR_NOID, ap);
64 	if ((level & ERROR_LEVEL) >= ERROR_ERROR)
65 		exit(code);
66 }
67 
verr(int code,const char * fmt,va_list ap)68 extern void verr(int code, const char* fmt, va_list ap)
69 {
70 	errmsg(ERROR_ERROR|ERROR_SYSTEM, code, fmt, ap);
71 }
72 
err(int code,const char * fmt,...)73 extern void err(int code, const char* fmt, ...)
74 {
75 	va_list	ap;
76 
77 	va_start(ap, fmt);
78 	errmsg(ERROR_ERROR|ERROR_SYSTEM, code, fmt, ap);
79 	va_end(ap);
80 }
81 
verrx(int code,const char * fmt,va_list ap)82 extern void verrx(int code, const char* fmt, va_list ap)
83 {
84 	errmsg(ERROR_ERROR, code, fmt, ap);
85 }
86 
errx(int code,const char * fmt,...)87 extern void errx(int code, const char* fmt, ...)
88 {
89 	va_list	ap;
90 
91 	va_start(ap, fmt);
92 	errmsg(ERROR_ERROR, code, fmt, ap);
93 	va_end(ap);
94 }
95 
vwarn(const char * fmt,va_list ap)96 extern void vwarn(const char* fmt, va_list ap)
97 {
98 	errmsg(ERROR_WARNING|ERROR_SYSTEM, 0, fmt, ap);
99 }
100 
warn(const char * fmt,...)101 extern void warn(const char* fmt, ...)
102 {
103 	va_list	ap;
104 
105 	va_start(ap, fmt);
106 	errmsg(ERROR_WARNING|ERROR_SYSTEM, 0, fmt, ap);
107 	va_end(ap);
108 }
109 
vwarnx(const char * fmt,va_list ap)110 extern void vwarnx(const char* fmt, va_list ap)
111 {
112 	errmsg(ERROR_WARNING, 0, fmt, ap);
113 }
114 
warnx(const char * fmt,...)115 extern void warnx(const char* fmt, ...)
116 {
117 	va_list	ap;
118 
119 	va_start(ap, fmt);
120 	errmsg(ERROR_WARNING, 0, fmt, ap);
121 	va_end(ap);
122 }
123 
124 #endif
125