glib/gio/gioerror.c
2012-08-28 13:16:25 -04:00

248 lines
4.8 KiB
C

/* GIO - GLib Input, Output and Streaming Library
*
* Copyright (C) 2006-2007 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General
* Public License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307, USA.
*
* Author: Alexander Larsson <alexl@redhat.com>
*/
#include "config.h"
#include <errno.h>
#include "gioerror.h"
/**
* SECTION:gioerror
* @short_description: Error helper functions
* @include: gio/gio.h
*
* Contains helper functions for reporting errors to the user.
**/
/**
* g_io_error_quark:
*
* Gets the GIO Error Quark.
*
* Return value: a #GQuark.
**/
G_DEFINE_QUARK (g-io-error-quark, g_io_error)
/**
* g_io_error_from_errno:
* @err_no: Error number as defined in errno.h.
*
* Converts errno.h error codes into GIO error codes.
*
* Returns: #GIOErrorEnum value for the given errno.h error number.
**/
GIOErrorEnum
g_io_error_from_errno (gint err_no)
{
switch (err_no)
{
#ifdef EEXIST
case EEXIST:
return G_IO_ERROR_EXISTS;
break;
#endif
#ifdef EISDIR
case EISDIR:
return G_IO_ERROR_IS_DIRECTORY;
break;
#endif
#ifdef EACCES
case EACCES:
return G_IO_ERROR_PERMISSION_DENIED;
break;
#endif
#ifdef ENAMETOOLONG
case ENAMETOOLONG:
return G_IO_ERROR_FILENAME_TOO_LONG;
break;
#endif
#ifdef ENOENT
case ENOENT:
return G_IO_ERROR_NOT_FOUND;
break;
#endif
#ifdef ENOTDIR
case ENOTDIR:
return G_IO_ERROR_NOT_DIRECTORY;
break;
#endif
#ifdef EROFS
case EROFS:
return G_IO_ERROR_READ_ONLY;
break;
#endif
#ifdef ELOOP
case ELOOP:
return G_IO_ERROR_TOO_MANY_LINKS;
break;
#endif
#ifdef ENOSPC
case ENOSPC:
return G_IO_ERROR_NO_SPACE;
break;
#endif
#ifdef ENOMEM
case ENOMEM:
return G_IO_ERROR_NO_SPACE;
break;
#endif
#ifdef EINVAL
case EINVAL:
return G_IO_ERROR_INVALID_ARGUMENT;
break;
#endif
#ifdef EPERM
case EPERM:
return G_IO_ERROR_PERMISSION_DENIED;
break;
#endif
#ifdef ECANCELED
case ECANCELED:
return G_IO_ERROR_CANCELLED;
break;
#endif
#if defined(ENOTEMPTY) && (!defined (EEXIST) || (ENOTEMPTY != EEXIST))
case ENOTEMPTY:
return G_IO_ERROR_NOT_EMPTY;
break;
#endif
#ifdef ENOTSUP
case ENOTSUP:
return G_IO_ERROR_NOT_SUPPORTED;
break;
#endif
#ifdef ETIMEDOUT
case ETIMEDOUT:
return G_IO_ERROR_TIMED_OUT;
break;
#endif
#ifdef EBUSY
case EBUSY:
return G_IO_ERROR_BUSY;
break;
#endif
/* some magic to deal with EWOULDBLOCK and EAGAIN.
* apparently on HP-UX these are actually defined to different values,
* but on Linux, for example, they are the same.
*/
#if defined(EWOULDBLOCK) && defined(EAGAIN) && EWOULDBLOCK == EAGAIN
/* we have both and they are the same: only emit one case. */
case EAGAIN:
return G_IO_ERROR_WOULD_BLOCK;
break;
#else
/* else: consider each of them separately. this handles both the
* case of having only one and the case where they are different values.
*/
# ifdef EAGAIN
case EAGAIN:
return G_IO_ERROR_WOULD_BLOCK;
break;
# endif
# ifdef EWOULDBLOCK
case EWOULDBLOCK:
return G_IO_ERROR_WOULD_BLOCK;
break;
# endif
#endif
#ifdef EMFILE
case EMFILE:
return G_IO_ERROR_TOO_MANY_OPEN_FILES;
break;
#endif
#ifdef EADDRINUSE
case EADDRINUSE:
return G_IO_ERROR_ADDRESS_IN_USE;
break;
#endif
#ifdef EHOSTUNREACH
case EHOSTUNREACH:
return G_IO_ERROR_HOST_UNREACHABLE;
break;
#endif
#ifdef ENETUNREACH
case ENETUNREACH:
return G_IO_ERROR_NETWORK_UNREACHABLE;
break;
#endif
#ifdef ECONNREFUSED
case ECONNREFUSED:
return G_IO_ERROR_CONNECTION_REFUSED;
break;
#endif
default:
return G_IO_ERROR_FAILED;
break;
}
}
#ifdef G_OS_WIN32
/**
* g_io_error_from_win32_error:
* @error_code: Windows error number.
*
* Converts some common error codes into GIO error codes. The
* fallback value G_IO_ERROR_FAILED is returned for error codes not
* handled.
*
* Returns: #GIOErrorEnum value for the given error number.
*
* Since: 2.26
**/
GIOErrorEnum
g_io_error_from_win32_error (gint error_code)
{
switch (error_code)
{
default:
return G_IO_ERROR_FAILED;
break;
}
}
#endif