source: mainline/uspace/lib/c/generic/str_error.c@ 97b199b1

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 97b199b1 was 79ae36dd, checked in by Martin Decky <martin@…>, 14 years ago

new async framework with integrated exchange tracking

  • strict isolation between low-level IPC and high-level async framework with integrated exchange tracking
    • each IPC connection is represented by an async_sess_t structure
    • each IPC exchange is represented by an async_exch_t structure
    • exchange management is either based on atomic messages (EXCHANGE_ATOMIC), locking (EXCHANGE_SERIALIZE) or connection cloning (EXCHANGE_CLONE)
  • async_obsolete: temporary compatibility layer to keep old async clients working (several pieces of code are currently broken, but only non-essential functionality)
  • IPC_M_PHONE_HANGUP is now method no. 0 (for elegant boolean evaluation)
  • IPC_M_DEBUG_ALL has been renamed to IPC_M_DEBUG
  • IPC_M_PING has been removed (VFS protocol now has VFS_IN_PING)
  • console routines in libc have been rewritten for better abstraction
  • additional use for libc-private header files (FILE structure opaque to the client)
  • various cstyle changes (typos, indentation, missing externs in header files, improved comments, etc.)
  • Property mode set to 100644
File size: 2.6 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
43static const char* err_desc[] = {
44 "No error",
45 "No such entry",
46 "Not enough memory",
47 "Limit exceeded",
48 "Connection refused",
49 "Forwarding error",
50 "Permission denied",
51 "Answerbox closed connection",
52 "Other party error",
53 "Entry already exists",
54 "Bad memory pointer",
55 "Not supported",
56 "Address not available",
57 "Timeout expired",
58 "Invalid value",
59 "Resource is busy",
60 "Result does not fit its size",
61 "Operation interrupted"
62};
63
64static fibril_local char noerr[NOERR_LEN];
65
66const char *str_error(const int e)
67{
68 if ((e <= 0) && (e >= MIN_ERRNO))
69 return err_desc[-e];
70
71 /* Ad hoc descriptions of error codes interesting for USB. */
72 // FIXME: integrate these as first-class error values
73 switch (e) {
74 case EBADCHECKSUM:
75 return "Bad checksum";
76 case ESTALL:
77 return "Operation stalled";
78 case EAGAIN:
79 return "Resource temporarily unavailable";
80 case EEMPTY:
81 return "Resource is empty";
82 default:
83 break;
84 }
85
86 snprintf(noerr, NOERR_LEN, "Unkown error code %d", e);
87 return noerr;
88}
89
90/** @}
91 */
Note: See TracBrowser for help on using the repository browser.