Magellan Linux

Annotation of /trunk/mkinitrd-magellan/klibc/usr/dash/error.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1122 - (hide annotations) (download)
Wed Aug 18 21:11:40 2010 UTC (13 years, 8 months ago) by niro
File MIME type: text/plain
File size: 4290 byte(s)
-updated to klibc-1.5.19
1 niro 532 /*-
2     * Copyright (c) 1991, 1993
3     * The Regents of the University of California. All rights reserved.
4     * Copyright (c) 1997-2005
5     * Herbert Xu <herbert@gondor.apana.org.au>. All rights reserved.
6     *
7     * This code is derived from software contributed to Berkeley by
8     * Kenneth Almquist.
9     *
10     * Redistribution and use in source and binary forms, with or without
11     * modification, are permitted provided that the following conditions
12     * are met:
13     * 1. Redistributions of source code must retain the above copyright
14     * notice, this list of conditions and the following disclaimer.
15     * 2. Redistributions in binary form must reproduce the above copyright
16     * notice, this list of conditions and the following disclaimer in the
17     * documentation and/or other materials provided with the distribution.
18     * 3. Neither the name of the University nor the names of its contributors
19     * may be used to endorse or promote products derived from this software
20     * without specific prior written permission.
21     *
22     * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23     * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24     * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25     * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26     * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27     * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28     * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29     * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30     * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31     * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32     * SUCH DAMAGE.
33     *
34     * @(#)error.h 8.2 (Berkeley) 5/4/95
35     */
36    
37     #ifndef DASH_ERROR_H
38     #define DASH_ERROR_H
39    
40     #include <setjmp.h>
41     #include <signal.h>
42    
43     /*
44     * Types of operations (passed to the errmsg routine).
45     */
46    
47     #define E_OPEN 01 /* opening a file */
48     #define E_CREAT 02 /* creating a file */
49     #define E_EXEC 04 /* executing a program */
50    
51    
52     /*
53     * We enclose jmp_buf in a structure so that we can declare pointers to
54     * jump locations. The global variable handler contains the location to
55     * jump to when an exception occurs, and the global variable exception
56     * contains a code identifying the exeception. To implement nested
57     * exception handlers, the user should save the value of handler on entry
58     * to an inner scope, set handler to point to a jmploc structure for the
59     * inner scope, and restore handler on exit from the scope.
60     */
61    
62     struct jmploc {
63     jmp_buf loc;
64     };
65    
66     extern struct jmploc *handler;
67     extern int exception;
68    
69     /* exceptions */
70     #define EXINT 0 /* SIGINT received */
71     #define EXERROR 1 /* a generic error */
72     #define EXSHELLPROC 2 /* execute a shell procedure */
73     #define EXEXEC 3 /* command execution failed */
74     #define EXEXIT 4 /* exit the shell */
75    
76    
77     /*
78     * These macros allow the user to suspend the handling of interrupt signals
79     * over a period of time. This is similar to SIGHOLD to or sigblock, but
80     * much more efficient and portable. (But hacking the kernel is so much
81     * more fun than worrying about efficiency and portability. :-))
82     */
83    
84     extern int suppressint;
85     extern volatile sig_atomic_t intpending;
86    
87     #define barrier() ({ __asm__ __volatile__ ("": : :"memory"); })
88     #define INTOFF \
89     ({ \
90     suppressint++; \
91     barrier(); \
92     0; \
93     })
94     #ifdef REALLY_SMALL
95     void __inton(void);
96     #define INTON __inton()
97     #else
98     #define INTON \
99     ({ \
100     barrier(); \
101     if (--suppressint == 0 && intpending) onint(); \
102     0; \
103     })
104     #endif
105     #define FORCEINTON \
106     ({ \
107     barrier(); \
108     suppressint = 0; \
109     if (intpending) onint(); \
110     0; \
111     })
112     #define SAVEINT(v) ((v) = suppressint)
113     #define RESTOREINT(v) \
114     ({ \
115     barrier(); \
116     if ((suppressint = (v)) == 0 && intpending) onint(); \
117     0; \
118     })
119     #define CLEAR_PENDING_INT intpending = 0
120     #define int_pending() intpending
121    
122     void exraise(int) __attribute__((__noreturn__));
123     #ifdef USE_NORETURN
124     void onint(void) __attribute__((__noreturn__));
125     #else
126     void onint(void);
127     #endif
128     void sh_error(const char *, ...) __attribute__((__noreturn__));
129     void exerror(int, const char *, ...) __attribute__((__noreturn__));
130     const char *errmsg(int, int);
131    
132     void sh_warnx(const char *, ...);
133    
134     #endif /* DASH_ERROR_H */