summaryrefslogtreecommitdiff
path: root/usr/src/lib/libast/common/include/error.h
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/libast/common/include/error.h')
-rw-r--r--usr/src/lib/libast/common/include/error.h182
1 files changed, 182 insertions, 0 deletions
diff --git a/usr/src/lib/libast/common/include/error.h b/usr/src/lib/libast/common/include/error.h
new file mode 100644
index 0000000000..e1af2396de
--- /dev/null
+++ b/usr/src/lib/libast/common/include/error.h
@@ -0,0 +1,182 @@
+/***********************************************************************
+* *
+* This software is part of the ast package *
+* Copyright (c) 1985-2007 AT&T Knowledge Ventures *
+* and is licensed under the *
+* Common Public License, Version 1.0 *
+* by AT&T Knowledge Ventures *
+* *
+* A copy of the License is available at *
+* http://www.opensource.org/licenses/cpl1.0.txt *
+* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
+* *
+* Information and Software Systems Research *
+* AT&T Research *
+* Florham Park NJ *
+* *
+* Glenn Fowler <gsf@research.att.com> *
+* David Korn <dgk@research.att.com> *
+* Phong Vo <kpv@research.att.com> *
+* *
+***********************************************************************/
+#pragma prototyped
+/*
+ * Glenn Fowler
+ * AT&T Research
+ *
+ * option, error and message formatter external definitions
+ */
+
+#ifndef _ERROR_H
+#define _ERROR_H
+
+#include <ast.h>
+#include <option.h>
+#include <errno.h>
+
+#define ERROR_VERSION 20070319L
+
+#if !defined(errno) && defined(__DYNAMIC__)
+#define errno __DYNAMIC__(errno)
+#endif
+
+#define ERROR_debug(n) (-(n))
+#define ERROR_exit(n) ((n)+ERROR_ERROR)
+#define ERROR_system(n) (((n)+ERROR_ERROR)|ERROR_SYSTEM)
+#define ERROR_usage(n) ((((n)?2:0)+ERROR_ERROR)|ERROR_USAGE)
+#define ERROR_warn(n) (ERROR_WARNING)
+
+#ifndef ERROR_catalog
+#define ERROR_catalog(t) t
+#endif
+#ifndef ERROR_dictionary
+#define ERROR_dictionary(t) t
+#endif
+
+#ifndef ERROR_translate
+#define ERROR_translating() (error_info.translate&&(ast.locale.set&(1<<AST_LC_MESSAGES)))
+#define ERROR_translate(l,i,d,m) (ERROR_translating()?errorx((const char*)l,(const char*)i,(const char*)d,(const char*)m):(m))
+#endif
+
+#define ERROR_INFO 0 /* info message -- no err_id */
+#define ERROR_WARNING 1 /* warning message */
+#define ERROR_ERROR 2 /* error message -- no err_exit */
+#define ERROR_FATAL 3 /* error message with err_exit */
+#define ERROR_NOEXEC EXIT_NOEXEC /* shell convention */
+#define ERROR_NOENT EXIT_NOTFOUND /* shell convention */
+#define ERROR_PANIC ERROR_LEVEL /* panic message with err_exit */
+
+#define ERROR_LEVEL 0x00ff /* level portion of status */
+#define ERROR_SYSTEM 0x0100 /* report system errno message */
+#define ERROR_OUTPUT 0x0200 /* next arg is error fd */
+#define ERROR_SOURCE 0x0400 /* next 2 args are FILE,LINE */
+#define ERROR_USAGE 0x0800 /* usage message */
+#define ERROR_PROMPT 0x1000 /* omit trailing newline */
+#define ERROR_NOID 0x2000 /* omit err_id */
+#define ERROR_LIBRARY 0x4000 /* library routine error */
+
+#define ERROR_INTERACTIVE 0x0001 /* context is interactive */
+#define ERROR_SILENT 0x0002 /* context is silent */
+#define ERROR_NOTIFY 0x0004 /* main(-sig,0,ctx) on signal */
+
+#define ERROR_FREE 0x0010 /* free context on pop */
+#define ERROR_POP 0x0020 /* pop context */
+#define ERROR_PUSH 0x0040 /* push context */
+#define ERROR_SET 0x0080 /* set context */
+
+/*
+ * errorpush()/errorpop() are obsolete -- use errorctx() instead
+ */
+
+#ifndef ERROR_CONTEXT_T
+#define ERROR_CONTEXT_T Error_info_t
+#endif
+
+#define ERROR_CONTEXT_BASE ((Error_context_t*)&error_info.context)
+
+#define errorpush(p,f) (*(p)=*ERROR_CONTEXT_BASE,*ERROR_CONTEXT_BASE=error_info.empty,error_info.context=(Error_context_t*)(p),error_info.flags=(f))
+#define errorpop(p) (*ERROR_CONTEXT_BASE=*(p))
+
+typedef struct Error_info_s Error_info_t;
+typedef struct Error_context_s Error_context_t;
+
+#define ERROR_CONTEXT \
+ ERROR_CONTEXT_T* context; /* prev context stack element */ \
+ int errors; /* >= ERROR_ERROR count */ \
+ int flags; /* context flags */ \
+ int line; /* input|output line number */ \
+ int warnings; /* ERROR_WARNING count */ \
+ char* file; /* input|output file name */ \
+ char* id; /* command id */
+
+struct Error_context_s /* context stack element */
+{
+ ERROR_CONTEXT
+};
+
+struct Error_info_s /* error state */
+{
+ int fd; /* write(2) fd */
+
+ void (*exit)(int); /* error exit */
+ ssize_t (*write)(int, const void*, size_t); /* error output */
+
+ /* the rest are implicitly initialized */
+
+ int clear; /* default clear ERROR_* flags */
+ int core; /* level>=core -> core dump */
+ int indent; /* debug trace indent level */
+ int init; /* initialized */
+ int last_errno; /* last reported errno */
+ int mask; /* multi level debug trace mask */
+ int set; /* default set ERROR_* flags */
+ int trace; /* debug trace level */
+
+ char* version; /* ERROR_SOURCE command version */
+
+ int (*auxilliary)(Sfio_t*, int, int); /* aux info to append */
+
+ ERROR_CONTEXT /* top of context stack */
+
+ Error_context_t empty; /* empty context stack element */
+
+ unsigned long time; /* debug time trace */
+
+ char* (*translate)(const char*, const char*, const char*, const char*); /* format translator */
+
+ const char* catalog; /* message catalog */
+};
+
+#ifndef errno
+extern int errno; /* system call error status */
+#endif
+
+#if _BLD_ast && defined(__EXPORT__)
+#define extern extern __EXPORT__
+#endif
+#if !_BLD_ast && defined(__IMPORT__)
+#define extern extern __IMPORT__
+#endif
+
+extern Error_info_t* _error_infop_;
+
+#define error_info (*_error_infop_)
+
+#undef extern
+
+#if _BLD_ast && defined(__EXPORT__)
+#define extern __EXPORT__
+#endif
+
+extern void error(int, ...);
+extern int errormsg(const char*, int, ...);
+extern int errorf(void*, void*, int, ...);
+extern void errorv(const char*, int, va_list);
+#ifndef errorx
+extern char* errorx(const char*, const char*, const char*, const char*);
+#endif
+extern Error_info_t* errorctx(Error_info_t*, int, int);
+
+#undef extern
+
+#endif