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
26void _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
47static void
48errmsg(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
68extern void verr(int code, const char* fmt, va_list ap)
69{
70	errmsg(ERROR_ERROR|ERROR_SYSTEM, code, fmt, ap);
71}
72
73extern 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
82extern void verrx(int code, const char* fmt, va_list ap)
83{
84	errmsg(ERROR_ERROR, code, fmt, ap);
85}
86
87extern 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
96extern void vwarn(const char* fmt, va_list ap)
97{
98	errmsg(ERROR_WARNING|ERROR_SYSTEM, 0, fmt, ap);
99}
100
101extern 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
110extern void vwarnx(const char* fmt, va_list ap)
111{
112	errmsg(ERROR_WARNING, 0, fmt, ap);
113}
114
115extern 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