source: mainline/uspace/lib/c/generic/str_error.c@ addbce4

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since addbce4 was 9af1c61, checked in by Jiří Zárevúcky <zarevucky.jiri@…>, 8 years ago

Print errno values as string, rather than just numbers.

  • Property mode set to 100644
File size: 3.5 KB
Line 
1/*
2 * Copyright (c) 2010 Martin Decky
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29/** @addtogroup libc
30 * @{
31 */
32/** @file
33 */
34
35#include <errno.h>
36#include <str_error.h>
37#include <stdio.h>
38#include <fibril.h>
39
40#define MIN_ERRNO -17
41#define NOERR_LEN 64
42
43// TODO: this file should be generated from errno declarations
44
45static const char* err_name[] = {
46 "EOK",
47 "ENOENT",
48 "ENOMEM",
49 "ELIMIT",
50 "EREFUSED",
51 "EFORWARD",
52 "EPERM",
53 "EHANGUP",
54 "EPARTY",
55 "EEXIST",
56 "EBADMEM",
57 "ENOTSUP",
58 "EADDRNOTAVAIL",
59 "ETIMEOUT",
60 "EINVAL",
61 "EBUSY",
62 "EOVERFLOW",
63 "EINTR"
64};
65
66static const char* err_desc[] = {
67 "No error",
68 "No such entry",
69 "Not enough memory",
70 "Limit exceeded",
71 "Connection refused",
72 "Forwarding error",
73 "Permission denied",
74 "Answerbox closed connection",
75 "Other party error",
76 "Entry already exists",
77 "Bad memory pointer",
78 "Not supported",
79 "Address not available",
80 "Timeout expired",
81 "Invalid value",
82 "Resource is busy",
83 "Result does not fit its size",
84 "Operation interrupted"
85};
86
87static fibril_local char noerr[NOERR_LEN];
88
89const char *str_error_name(errno_t e)
90{
91 if ((e <= 0) && (e >= MIN_ERRNO))
92 return err_name[-e];
93
94 /* Ad hoc descriptions of error codes interesting for USB. */
95 // FIXME: integrate these as first-class error values
96 switch (e) {
97 case ENOFS:
98 return "ENOFS";
99 case EBADCHECKSUM:
100 return "EBADCHECKSUM";
101 case ESTALL:
102 return "ESTALL";
103 case EAGAIN:
104 return "EAGAIN";
105 case EEMPTY:
106 return "EEMPTY";
107 default:
108 break;
109 }
110
111 snprintf(noerr, NOERR_LEN, "(%d)", (int)e);
112 return noerr;
113}
114
115const char *str_error(errno_t e)
116{
117 if ((e <= 0) && (e >= MIN_ERRNO))
118 return err_desc[-e];
119
120 /* Ad hoc descriptions of error codes interesting for USB. */
121 // FIXME: integrate these as first-class error values
122 switch (e) {
123 case ENOFS:
124 return "No such file system type";
125 case EBADCHECKSUM:
126 return "Bad checksum";
127 case ESTALL:
128 return "Operation stalled";
129 case EAGAIN:
130 return "Resource temporarily unavailable";
131 case EEMPTY:
132 return "Resource is empty";
133 default:
134 break;
135 }
136
137 snprintf(noerr, NOERR_LEN, "Unknown error code (%d)", (int)e);
138 return noerr;
139}
140
141/** @}
142 */
Note: See TracBrowser for help on using the repository browser.