Home | History | Annotate | Download | only in gio
      1 /* GIO - GLib Input, Output and Streaming Library
      2  *
      3  * Copyright (C) 2006-2007 Red Hat, Inc.
      4  *
      5  * This library is free software; you can redistribute it and/or
      6  * modify it under the terms of the GNU Lesser General Public
      7  * License as published by the Free Software Foundation; either
      8  * version 2 of the License, or (at your option) any later version.
      9  *
     10  * This library is distributed in the hope that it will be useful,
     11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     13  * Lesser General Public License for more details.
     14  *
     15  * You should have received a copy of the GNU Lesser General
     16  * Public License along with this library; if not, write to the
     17  * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
     18  * Boston, MA 02111-1307, USA.
     19  *
     20  * Author: Alexander Larsson <alexl (at) redhat.com>
     21  */
     22 
     23 #include "config.h"
     24 #include <errno.h>
     25 #include "gioerror.h"
     26 
     27 #include "gioalias.h"
     28 
     29 /**
     30  * SECTION:gioerror
     31  * @short_description: Error helper functions
     32  * @include: gio/gio.h
     33  *
     34  * Contains helper functions for reporting errors to the user.
     35  **/
     36 
     37 /**
     38  * g_io_error_quark:
     39  *
     40  * Gets the GIO Error Quark.
     41  *
     42  * Return value: a #GQuark.
     43  **/
     44 GQuark
     45 g_io_error_quark (void)
     46 {
     47   return g_quark_from_static_string ("g-io-error-quark");
     48 }
     49 
     50 /**
     51  * g_io_error_from_errno:
     52  * @err_no: Error number as defined in errno.h.
     53  *
     54  * Converts errno.h error codes into GIO error codes.
     55  *
     56  * Returns: #GIOErrorEnum value for the given errno.h error number.
     57  **/
     58 GIOErrorEnum
     59 g_io_error_from_errno (gint err_no)
     60 {
     61   switch (err_no)
     62     {
     63 #ifdef EEXIST
     64     case EEXIST:
     65       return G_IO_ERROR_EXISTS;
     66       break;
     67 #endif
     68 
     69 #ifdef EISDIR
     70     case EISDIR:
     71       return G_IO_ERROR_IS_DIRECTORY;
     72       break;
     73 #endif
     74 
     75 #ifdef EACCES
     76     case EACCES:
     77       return G_IO_ERROR_PERMISSION_DENIED;
     78       break;
     79 #endif
     80 
     81 #ifdef ENAMETOOLONG
     82     case ENAMETOOLONG:
     83       return G_IO_ERROR_FILENAME_TOO_LONG;
     84       break;
     85 #endif
     86 
     87 #ifdef ENOENT
     88     case ENOENT:
     89       return G_IO_ERROR_NOT_FOUND;
     90       break;
     91 #endif
     92 
     93 #ifdef ENOTDIR
     94     case ENOTDIR:
     95       return G_IO_ERROR_NOT_DIRECTORY;
     96       break;
     97 #endif
     98 
     99 #ifdef EROFS
    100     case EROFS:
    101       return G_IO_ERROR_READ_ONLY;
    102       break;
    103 #endif
    104 
    105 #ifdef ELOOP
    106     case ELOOP:
    107       return G_IO_ERROR_TOO_MANY_LINKS;
    108       break;
    109 #endif
    110 
    111 #ifdef ENOSPC
    112     case ENOSPC:
    113       return G_IO_ERROR_NO_SPACE;
    114       break;
    115 #endif
    116 
    117 #ifdef ENOMEM
    118     case ENOMEM:
    119       return G_IO_ERROR_NO_SPACE;
    120       break;
    121 #endif
    122 
    123 #ifdef EINVAL
    124     case EINVAL:
    125       return G_IO_ERROR_INVALID_ARGUMENT;
    126       break;
    127 #endif
    128 
    129 #ifdef EPERM
    130     case EPERM:
    131       return G_IO_ERROR_PERMISSION_DENIED;
    132       break;
    133 #endif
    134 
    135 #ifdef ECANCELED
    136     case ECANCELED:
    137       return G_IO_ERROR_CANCELLED;
    138       break;
    139 #endif
    140 
    141 #if defined(ENOTEMPTY) && (!defined (EEXIST) || (ENOTEMPTY != EEXIST))
    142     case ENOTEMPTY:
    143       return G_IO_ERROR_NOT_EMPTY;
    144       break;
    145 #endif
    146 
    147 #ifdef ENOTSUP
    148     case ENOTSUP:
    149       return G_IO_ERROR_NOT_SUPPORTED;
    150       break;
    151 #endif
    152 
    153 #ifdef ETIMEDOUT
    154     case ETIMEDOUT:
    155       return G_IO_ERROR_TIMED_OUT;
    156       break;
    157 #endif
    158 
    159 #ifdef EBUSY
    160     case EBUSY:
    161       return G_IO_ERROR_BUSY;
    162       break;
    163 #endif
    164 
    165 /* some magic to deal with EWOULDBLOCK and EAGAIN.
    166  * apparently on HP-UX these are actually defined to different values,
    167  * but on Linux, for example, they are the same.
    168  */
    169 #if defined(EWOULDBLOCK) && defined(EAGAIN) && EWOULDBLOCK == EAGAIN
    170     /* we have both and they are the same: only emit one case. */
    171     case EAGAIN:
    172       return G_IO_ERROR_WOULD_BLOCK;
    173       break;
    174 #else
    175     /* else: consider each of them separately.  this handles both the
    176      * case of having only one and the case where they are different values.
    177      */
    178 # ifdef EAGAIN
    179     case EAGAIN:
    180       return G_IO_ERROR_WOULD_BLOCK;
    181       break;
    182 # endif
    183 
    184 # ifdef EWOULDBLOCK
    185     case EWOULDBLOCK:
    186       return G_IO_ERROR_WOULD_BLOCK;
    187       break;
    188 # endif
    189 #endif
    190 
    191 #ifdef EMFILE
    192     case EMFILE:
    193       return G_IO_ERROR_TOO_MANY_OPEN_FILES;
    194       break;
    195 #endif
    196 
    197     default:
    198       return G_IO_ERROR_FAILED;
    199       break;
    200     }
    201 }
    202 
    203 #define __G_IO_ERROR_C__
    204 #include "gioaliasdef.c"
    205