LCOV - code coverage report
Current view: top level - lib - errname.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 8 0.0 %
Date: 2023-04-06 08:38:28 Functions: 0 1 0.0 %

          Line data    Source code
       1             : // SPDX-License-Identifier: GPL-2.0
       2             : #include <linux/build_bug.h>
       3             : #include <linux/errno.h>
       4             : #include <linux/errname.h>
       5             : #include <linux/kernel.h>
       6             : #include <linux/math.h>
       7             : 
       8             : /*
       9             :  * Ensure these tables do not accidentally become gigantic if some
      10             :  * huge errno makes it in. On most architectures, the first table will
      11             :  * only have about 140 entries, but mips and parisc have more sparsely
      12             :  * allocated errnos (with EHWPOISON = 257 on parisc, and EDQUOT = 1133
      13             :  * on mips), so this wastes a bit of space on those - though we
      14             :  * special case the EDQUOT case.
      15             :  */
      16             : #define E(err) [err + BUILD_BUG_ON_ZERO(err <= 0 || err > 300)] = "-" #err
      17             : static const char *names_0[] = {
      18             :         E(E2BIG),
      19             :         E(EACCES),
      20             :         E(EADDRINUSE),
      21             :         E(EADDRNOTAVAIL),
      22             :         E(EADV),
      23             :         E(EAFNOSUPPORT),
      24             :         E(EAGAIN), /* EWOULDBLOCK */
      25             :         E(EALREADY),
      26             :         E(EBADE),
      27             :         E(EBADF),
      28             :         E(EBADFD),
      29             :         E(EBADMSG),
      30             :         E(EBADR),
      31             :         E(EBADRQC),
      32             :         E(EBADSLT),
      33             :         E(EBFONT),
      34             :         E(EBUSY),
      35             :         E(ECANCELED), /* ECANCELLED */
      36             :         E(ECHILD),
      37             :         E(ECHRNG),
      38             :         E(ECOMM),
      39             :         E(ECONNABORTED),
      40             :         E(ECONNREFUSED), /* EREFUSED */
      41             :         E(ECONNRESET),
      42             :         E(EDEADLK), /* EDEADLOCK */
      43             : #if EDEADLK != EDEADLOCK /* mips, sparc, powerpc */
      44             :         E(EDEADLOCK),
      45             : #endif
      46             :         E(EDESTADDRREQ),
      47             :         E(EDOM),
      48             :         E(EDOTDOT),
      49             : #ifndef CONFIG_MIPS
      50             :         E(EDQUOT),
      51             : #endif
      52             :         E(EEXIST),
      53             :         E(EFAULT),
      54             :         E(EFBIG),
      55             :         E(EHOSTDOWN),
      56             :         E(EHOSTUNREACH),
      57             :         E(EHWPOISON),
      58             :         E(EIDRM),
      59             :         E(EILSEQ),
      60             : #ifdef EINIT
      61             :         E(EINIT),
      62             : #endif
      63             :         E(EINPROGRESS),
      64             :         E(EINTR),
      65             :         E(EINVAL),
      66             :         E(EIO),
      67             :         E(EISCONN),
      68             :         E(EISDIR),
      69             :         E(EISNAM),
      70             :         E(EKEYEXPIRED),
      71             :         E(EKEYREJECTED),
      72             :         E(EKEYREVOKED),
      73             :         E(EL2HLT),
      74             :         E(EL2NSYNC),
      75             :         E(EL3HLT),
      76             :         E(EL3RST),
      77             :         E(ELIBACC),
      78             :         E(ELIBBAD),
      79             :         E(ELIBEXEC),
      80             :         E(ELIBMAX),
      81             :         E(ELIBSCN),
      82             :         E(ELNRNG),
      83             :         E(ELOOP),
      84             :         E(EMEDIUMTYPE),
      85             :         E(EMFILE),
      86             :         E(EMLINK),
      87             :         E(EMSGSIZE),
      88             :         E(EMULTIHOP),
      89             :         E(ENAMETOOLONG),
      90             :         E(ENAVAIL),
      91             :         E(ENETDOWN),
      92             :         E(ENETRESET),
      93             :         E(ENETUNREACH),
      94             :         E(ENFILE),
      95             :         E(ENOANO),
      96             :         E(ENOBUFS),
      97             :         E(ENOCSI),
      98             :         E(ENODATA),
      99             :         E(ENODEV),
     100             :         E(ENOENT),
     101             :         E(ENOEXEC),
     102             :         E(ENOKEY),
     103             :         E(ENOLCK),
     104             :         E(ENOLINK),
     105             :         E(ENOMEDIUM),
     106             :         E(ENOMEM),
     107             :         E(ENOMSG),
     108             :         E(ENONET),
     109             :         E(ENOPKG),
     110             :         E(ENOPROTOOPT),
     111             :         E(ENOSPC),
     112             :         E(ENOSR),
     113             :         E(ENOSTR),
     114             : #ifdef ENOSYM
     115             :         E(ENOSYM),
     116             : #endif
     117             :         E(ENOSYS),
     118             :         E(ENOTBLK),
     119             :         E(ENOTCONN),
     120             :         E(ENOTDIR),
     121             :         E(ENOTEMPTY),
     122             :         E(ENOTNAM),
     123             :         E(ENOTRECOVERABLE),
     124             :         E(ENOTSOCK),
     125             :         E(ENOTTY),
     126             :         E(ENOTUNIQ),
     127             :         E(ENXIO),
     128             :         E(EOPNOTSUPP),
     129             :         E(EOVERFLOW),
     130             :         E(EOWNERDEAD),
     131             :         E(EPERM),
     132             :         E(EPFNOSUPPORT),
     133             :         E(EPIPE),
     134             : #ifdef EPROCLIM
     135             :         E(EPROCLIM),
     136             : #endif
     137             :         E(EPROTO),
     138             :         E(EPROTONOSUPPORT),
     139             :         E(EPROTOTYPE),
     140             :         E(ERANGE),
     141             :         E(EREMCHG),
     142             : #ifdef EREMDEV
     143             :         E(EREMDEV),
     144             : #endif
     145             :         E(EREMOTE),
     146             :         E(EREMOTEIO),
     147             : #ifdef EREMOTERELEASE
     148             :         E(EREMOTERELEASE),
     149             : #endif
     150             :         E(ERESTART),
     151             :         E(ERFKILL),
     152             :         E(EROFS),
     153             : #ifdef ERREMOTE
     154             :         E(ERREMOTE),
     155             : #endif
     156             :         E(ESHUTDOWN),
     157             :         E(ESOCKTNOSUPPORT),
     158             :         E(ESPIPE),
     159             :         E(ESRCH),
     160             :         E(ESRMNT),
     161             :         E(ESTALE),
     162             :         E(ESTRPIPE),
     163             :         E(ETIME),
     164             :         E(ETIMEDOUT),
     165             :         E(ETOOMANYREFS),
     166             :         E(ETXTBSY),
     167             :         E(EUCLEAN),
     168             :         E(EUNATCH),
     169             :         E(EUSERS),
     170             :         E(EXDEV),
     171             :         E(EXFULL),
     172             : };
     173             : #undef E
     174             : 
     175             : #ifdef EREFUSED /* parisc */
     176             : static_assert(EREFUSED == ECONNREFUSED);
     177             : #endif
     178             : #ifdef ECANCELLED /* parisc */
     179             : static_assert(ECANCELLED == ECANCELED);
     180             : #endif
     181             : static_assert(EAGAIN == EWOULDBLOCK); /* everywhere */
     182             : 
     183             : #define E(err) [err - 512 + BUILD_BUG_ON_ZERO(err < 512 || err > 550)] = "-" #err
     184             : static const char *names_512[] = {
     185             :         E(ERESTARTSYS),
     186             :         E(ERESTARTNOINTR),
     187             :         E(ERESTARTNOHAND),
     188             :         E(ENOIOCTLCMD),
     189             :         E(ERESTART_RESTARTBLOCK),
     190             :         E(EPROBE_DEFER),
     191             :         E(EOPENSTALE),
     192             :         E(ENOPARAM),
     193             : 
     194             :         E(EBADHANDLE),
     195             :         E(ENOTSYNC),
     196             :         E(EBADCOOKIE),
     197             :         E(ENOTSUPP),
     198             :         E(ETOOSMALL),
     199             :         E(ESERVERFAULT),
     200             :         E(EBADTYPE),
     201             :         E(EJUKEBOX),
     202             :         E(EIOCBQUEUED),
     203             :         E(ERECALLCONFLICT),
     204             : };
     205             : #undef E
     206             : 
     207             : static const char *__errname(unsigned err)
     208             : {
     209           0 :         if (err < ARRAY_SIZE(names_0))
     210           0 :                 return names_0[err];
     211           0 :         if (err >= 512 && err - 512 < ARRAY_SIZE(names_512))
     212           0 :                 return names_512[err - 512];
     213             :         /* But why? */
     214             :         if (IS_ENABLED(CONFIG_MIPS) && err == EDQUOT) /* 1133 */
     215             :                 return "-EDQUOT";
     216             :         return NULL;
     217             : }
     218             : 
     219             : /*
     220             :  * errname(EIO) -> "EIO"
     221             :  * errname(-EIO) -> "-EIO"
     222             :  */
     223           0 : const char *errname(int err)
     224             : {
     225           0 :         const char *name = __errname(abs(err));
     226           0 :         if (!name)
     227             :                 return NULL;
     228             : 
     229           0 :         return err > 0 ? name + 1 : name;
     230             : }

Generated by: LCOV version 1.14