00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifdef HAVE_CONFIG_H
00034 #include <config.h>
00035 #endif
00036
00037 #include <string.h>
00038
00039 #include "rdd.h"
00040 #include "rdd_internals.h"
00041
00042 static int
00043 copymsg(char *buf, unsigned bufsize, char *msg)
00044 {
00045 if (msg == 0) {
00046 return RDD_BADARG;
00047 }
00048
00049 if ((strlen(msg) + 1) > bufsize) {
00050 return RDD_NOMEM;
00051 }
00052
00053 strncpy(buf, msg, bufsize);
00054 return RDD_OK;
00055 }
00056
00057 static char *
00058 get_message(int rc)
00059 {
00060 switch (rc) {
00061 case RDD_OK:
00062 return "ok";
00063 case RDD_NOMEM:
00064 return "out of memory";
00065 case RDD_BADARG:
00066 return "bad argument";
00067 case RDD_ECOMPRESS:
00068 return "compression error";
00069 case RDD_EWRITE:
00070 return "write error";
00071 case RDD_ECLOSE:
00072 return "close error";
00073 case RDD_EEXISTS:
00074 return "output file already exists";
00075 case RDD_EOPEN:
00076 return "cannot open file";
00077 case RDD_ECONNECT:
00078 return "cannot connect";
00079 case RDD_ETELL:
00080 return "cannot determine current position";
00081 case RDD_EREAD:
00082 return "read error";
00083 case RDD_ESEEK:
00084 return "seek error";
00085 case RDD_ESPACE:
00086 return "insufficient space in buffer or on device";
00087 case RDD_ESYNTAX:
00088 return "syntax error";
00089 case RDD_ERANGE:
00090 return "number out of range";
00091 case RDD_EAGAIN:
00092 return "try again later";
00093 case RDD_NOTFOUND:
00094 return "not found";
00095 case RDD_ABORTED:
00096 return "operation has been aborted";
00097 default:
00098 return 0;
00099 }
00100 }
00101
00102 int
00103 rdd_strerror(int rc, char *buf, unsigned bufsize)
00104 {
00105 char *msg;
00106
00107 if (buf == 0) {
00108 return RDD_BADARG;
00109 }
00110
00111 if ((msg = get_message(rc)) == 0) {
00112 return RDD_BADARG;
00113 }
00114
00115 return copymsg(buf, bufsize, msg);
00116 }