OLD | NEW |
1 /* Copyright (C) 1993-1995,1997,2000,2002-2005 Free Software Foundation, Inc. | 1 /* Copyright (C) 1993-1995,1997,2000,2002-2005 Free Software Foundation, Inc. |
2 This file is part of the GNU C Library. | 2 This file is part of the GNU C Library. |
3 | 3 |
4 The GNU C Library is free software; you can redistribute it and/or | 4 The GNU C Library is free software; you can redistribute it and/or |
5 modify it under the terms of the GNU Lesser General Public | 5 modify it under the terms of the GNU Lesser General Public |
6 License as published by the Free Software Foundation; either | 6 License as published by the Free Software Foundation; either |
7 version 2.1 of the License, or (at your option) any later version. | 7 version 2.1 of the License, or (at your option) any later version. |
8 | 8 |
9 The GNU C Library is distributed in the hope that it will be useful, | 9 The GNU C Library is distributed in the hope that it will be useful, |
10 but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 but WITHOUT ANY WARRANTY; without even the implied warranty of |
(...skipping 18 matching lines...) Expand all Loading... |
29 #include <sys/syslog.h> | 29 #include <sys/syslog.h> |
30 #include <execinfo.h> | 30 #include <execinfo.h> |
31 | 31 |
32 /* Abort with an error message. */ | 32 /* Abort with an error message. */ |
33 #include <not-cancel.h> | 33 #include <not-cancel.h> |
34 | 34 |
35 #ifdef FATAL_PREPARE_INCLUDE | 35 #ifdef FATAL_PREPARE_INCLUDE |
36 #include FATAL_PREPARE_INCLUDE | 36 #include FATAL_PREPARE_INCLUDE |
37 #endif | 37 #endif |
38 | 38 |
39 struct str_list | 39 struct __str_list |
40 { | 40 { |
41 const char *str; | 41 const char *str; |
42 size_t len; | 42 size_t len; |
43 struct str_list *next; | 43 struct __str_list *next; |
44 }; | 44 }; |
45 | 45 |
46 | 46 |
47 /* Abort with an error message. */ | 47 /* Abort with an error message. */ |
48 void | 48 void |
49 __libc_message (int do_abort, const char *fmt, ...) | 49 __libc_message (int do_abort, const char *fmt, ...) |
50 { | 50 { |
51 va_list ap; | 51 va_list ap; |
52 va_list ap_copy; | 52 va_list ap_copy; |
53 int fd = -1; | 53 int fd = -1; |
54 | 54 |
55 va_start (ap, fmt); | 55 va_start (ap, fmt); |
56 va_copy (ap_copy, ap); | 56 va_copy (ap_copy, ap); |
57 | 57 |
58 #ifdef FATAL_PREPARE | 58 #ifdef FATAL_PREPARE |
59 FATAL_PREPARE; | 59 FATAL_PREPARE; |
60 #endif | 60 #endif |
61 | 61 |
62 /* Open a descriptor for /dev/tty unless the user explicitly | 62 /* Open a descriptor for /dev/tty unless the user explicitly |
63 requests errors on standard error. */ | 63 requests errors on standard error. */ |
64 const char *on_2 = __secure_getenv ("LIBC_FATAL_STDERR_"); | 64 const char *on_2 = __secure_getenv ("LIBC_FATAL_STDERR_"); |
65 if (on_2 == NULL || *on_2 == '\0') | 65 if (on_2 == NULL || *on_2 == '\0') |
66 fd = open_not_cancel_2 (_PATH_TTY, O_RDWR | O_NOCTTY | O_NDELAY); | 66 fd = open_not_cancel_2 (_PATH_TTY, O_RDWR | O_NOCTTY | O_NDELAY); |
67 | 67 |
68 if (fd == -1) | 68 if (fd == -1) |
69 fd = STDERR_FILENO; | 69 fd = STDERR_FILENO; |
70 | 70 |
71 struct str_list *list = NULL; | 71 struct __str_list *list = NULL; |
72 int nlist = 0; | 72 int nlist = 0; |
73 | 73 |
74 const char *cp = fmt; | 74 const char *cp = fmt; |
75 while (*cp != '\0') | 75 while (*cp != '\0') |
76 { | 76 { |
77 /* Find the next "%s" or the end of the string. */ | 77 /* Find the next "%s" or the end of the string. */ |
78 const char *next = cp; | 78 const char *next = cp; |
79 while (next[0] != '%' || next[1] != 's') | 79 while (next[0] != '%' || next[1] != 's') |
80 { | 80 { |
81 next = __strchrnul (next + 1, '%'); | 81 next = __strchrnul (next + 1, '%'); |
(...skipping 11 matching lines...) Expand all Loading... |
93 len = strlen (str); | 93 len = strlen (str); |
94 cp += 2; | 94 cp += 2; |
95 } | 95 } |
96 else | 96 else |
97 { | 97 { |
98 str = cp; | 98 str = cp; |
99 len = next - cp; | 99 len = next - cp; |
100 cp = next; | 100 cp = next; |
101 } | 101 } |
102 | 102 |
103 struct str_list *newp = alloca (sizeof (struct str_list)); | 103 struct __str_list *newp = alloca (sizeof (struct __str_list)); |
104 newp->str = str; | 104 newp->str = str; |
105 newp->len = len; | 105 newp->len = len; |
106 newp->next = list; | 106 newp->next = list; |
107 list = newp; | 107 list = newp; |
108 ++nlist; | 108 ++nlist; |
109 } | 109 } |
110 | 110 |
111 bool written = false; | 111 bool written = false; |
112 if (nlist > 0) | 112 if (nlist > 0) |
113 { | 113 { |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
174 | 174 |
175 void | 175 void |
176 __libc_fatal (message) | 176 __libc_fatal (message) |
177 const char *message; | 177 const char *message; |
178 { | 178 { |
179 /* The loop is added only to keep gcc happy. */ | 179 /* The loop is added only to keep gcc happy. */ |
180 while (1) | 180 while (1) |
181 __libc_message (1, "%s", message); | 181 __libc_message (1, "%s", message); |
182 } | 182 } |
183 libc_hidden_def (__libc_fatal) | 183 libc_hidden_def (__libc_fatal) |
OLD | NEW |