// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
// vim: ts=8 sw=2 smarttab
/*
 * Ceph - scalable distributed file system
 *
 * Copyright (C) 2011 New Dream Network
 *
 * This is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License version 2.1, as published by the Free Software
 * Foundation.  See file COPYING.
 *
 */

#include <errno.h>
#include "include/types.h"
#include "include/compat.h"


// converts from linux errno values to host values
int32_t ceph_to_hostos_errno(int32_t r)
{
  if (r < -34) {
    switch (r) {
      case -35:
        return -EDEADLK;
      case -36:
        return -ENAMETOOLONG;
      case -37:
        return -ENOLCK;
      case -38:
        return -ENOSYS;
      case -39:
        return -ENOTEMPTY;
      case -40:
        return -ELOOP;
      case -42:
        return -ENOMSG;
      case -43:
        return -EIDRM;
      case -44:
        return -EPERM; //TODO ECHRNG
      case -45:
        return -EPERM; //TODO EL2NSYNC
      case -46:
        return -EPERM; //TODO EL3HLT
      case -47:
        return -EPERM; //TODO EL3RST
      case -48:
        return -EPERM; //TODO ELNRNG
      case -49:
        return -EPERM; //TODO EUNATCH
      case -51:
        return -EPERM; //TODO EL2HLT;
      case -52:
        return -EPERM; //TODO EBADE
      case -53:
        return -EPERM; //TODO EBADR
      case -54:
        return -EPERM; //TODO EXFULL
      case -55:
        return -EPERM; //TODO ENOANO
      case -56:
        return -EPERM; //TODO EBADRQC
      case -57:
        return -EPERM; //TODO EBADSLT
      case -59:
        return -EPERM; //TODO EBFONT
      case -60:
        return -ENOSTR;
      case -61:
        return -ENODATA;
      case -62:
        return -ETIME;
      case -63:
        return -ENOSR;
      case -64:
        return -EPERM; //TODO ENONET
      case -65:
        return -EPERM; //TODO ENOPKG
      case -66:
        return -EREMOTE;
      case -67:
        return -ENOLINK;
      case -68:
        return -EPERM; //TODO EADV
      case -69:
        return -EPERM; //TODO ESRMNT
      case -70:
        return -EPERM; //TODO ECOMM
      case -71:
        return -EPROTO;
      case -72:
        return -EMULTIHOP;
      case -73:
        return -EPERM; //TODO EDOTDOT
      case -74:
        return -EBADMSG;
      case -75:
        return -EOVERFLOW;
      case -76:
        return -EPERM; //TODO ENOTUNIQ
      case -77:
        return -EPERM; //TODO EBADFD
      case -78:
        return -EPERM; //TODO EREMCHG
      case -79:
        return -EPERM; //TODO ELIBACC
      case -80:
        return -EPERM; //TODO ELIBBAD
      case -81:
        return -EPERM; //TODO ELIBSCN
      case -82:
        return -EPERM; //TODO ELIBMAX
      case -83:
	return -EPERM; // TODO ELIBEXEC
      case -84:
        return -EILSEQ;
      case -85:
        return -EINTR;
      case -86:
        return -EPERM; //ESTRPIPE;
      case -87:
        return -EUSERS;
      case -88:
        return -ENOTSOCK;
      case -89:
        return -EDESTADDRREQ;
      case -90:
        return -EMSGSIZE;
      case -91:
        return -EPROTOTYPE;
      case -92:
        return -ENOPROTOOPT;
      case -93:
        return -EPROTONOSUPPORT;
      case -94:
        return -ESOCKTNOSUPPORT;
      case -95:
        return -EOPNOTSUPP;
      case -96:
        return -EPFNOSUPPORT;
      case -97:
        return -EAFNOSUPPORT;
      case -98:
        return -EADDRINUSE;
      case -99:
        return -EADDRNOTAVAIL;
      case -100:
        return -ENETDOWN;
      case -101:
        return -ENETUNREACH;
      case -102:
        return -ENETRESET;
      case -103:
        return -ECONNABORTED;
      case -104:
        return -ECONNRESET;
      case -105:
        return -ENOBUFS;
      case -106:
        return -EISCONN;
      case -107:
        return -ENOTCONN;
      case -108:
        return -ESHUTDOWN;
      case -109:
        return -ETOOMANYREFS;
      case -110:
        return -ETIMEDOUT;
      case -111:
        return -ECONNREFUSED;
      case -112:
        return -EHOSTDOWN;
      case -113:
        return -EHOSTUNREACH;
      case -114:
        return -EALREADY;
      case -115:
        return -EINPROGRESS;
      case -116:
        return -ESTALE;
      case -117:
        return -EPERM; //TODO EUCLEAN
      case -118:
        return -EPERM; //TODO ENOTNAM
      case -119:
        return -EPERM; //TODO ENAVAIL
      case -120:
        return -EPERM; //TODO EISNAM
      case -121:
        return -EREMOTEIO;
      case -122:
        return -EDQUOT;
      case -123:
        return -EPERM; //TODO ENOMEDIUM
      case -124:
        return -EPERM; //TODO EMEDIUMTYPE - not used
      case -125:
        return -ECANCELED;
      case -126:
        return -EPERM; //TODO ENOKEY
      case -127:
        return -EPERM; //TODO EKEYEXPIRED
      case -128:
        return -EPERM; //TODO EKEYREVOKED
      case -129:
        return -EPERM; //TODO EKEYREJECTED
      case -130:
        return -EOWNERDEAD;
      case -131:
        return -ENOTRECOVERABLE;
      case -132:
        return -EPERM; //TODO ERFKILL
      case -133:
        return -EPERM; //TODO EHWPOISON

      default: {
        break;
      }
    }
  }
  return r; // otherwise return original value
}

// converts Host OS errno values to linux/Ceph values
// XXX Currently not worked out
int32_t hostos_to_ceph_errno(int32_t r)
{
  return r;
}


