Signed-off-by: Pete Zaitcev <zaitcev@xxxxxxxxxx> diff --git a/include/cld_msg.h b/include/cld_msg.h index 01bda16..e4c8f28 100644 --- a/include/cld_msg.h +++ b/include/cld_msg.h @@ -257,5 +257,6 @@ struct cld_msg_event { extern unsigned long long cld_sid2llu(const uint8_t *sid); extern void __cld_rand64(void *p); +extern const char *cld_errstr(enum cle_err_codes ecode); #endif /* __CLD_MSG_H__ */ diff --git a/lib/common.c b/lib/common.c index fac652b..57f8696 100644 --- a/lib/common.c +++ b/lib/common.c @@ -19,3 +19,29 @@ void __cld_rand64(void *p) v[1] = rand(); } +const char *cld_errstr(enum cle_err_codes ecode) +{ + switch (ecode) { + case CLE_OK: return "Success"; + case CLE_SESS_EXISTS: return "Session exists"; + case CLE_SESS_INVAL: return "Invalid session"; + case CLE_DB_ERR: return "Database error"; + case CLE_BAD_PKT: return "Invalid/corrupted packet"; + case CLE_INODE_INVAL: return "Invalid inode number"; + case CLE_NAME_INVAL: return "Invalid file name"; + case CLE_OOM: return "Server out of memory"; + case CLE_FH_INVAL: return "Invalid file handle"; + case CLE_DATA_INVAL: return "Invalid data packet"; + case CLE_LOCK_INVAL: return "Invalid lock"; + case CLE_LOCK_CONFLICT: return "Conflicting lock held"; + case CLE_LOCK_PENDING: return "Lock waiting to be acquired"; + case CLE_MODE_INVAL: return "Operation incompatible with file mode"; + case CLE_INODE_EXISTS: return "File exists"; + case CLE_DIR_NOTEMPTY: return "Directory not empty"; + case CLE_INTERNAL_ERR: return "Internal error"; + case CLE_TIMEOUT: return "Session timed out"; + case CLE_SIG_INVAL: return "Bad HMAC signature"; + default: return "(unknown)"; + } +} + diff --git a/tools/cldcli.c b/tools/cldcli.c index 635bc6e..eb4ebc4 100644 --- a/tools/cldcli.c +++ b/tools/cldcli.c @@ -66,9 +66,11 @@ struct creq { struct cp_fc_info *cfi; }; +enum { CRESP_MSGSZ = 64 }; + struct cresp { enum thread_codes tcode; - char msg[64]; + char msg[CRESP_MSGSZ]; union { size_t file_len; unsigned int n_records; @@ -117,31 +119,10 @@ static error_t parse_opt (int key, char *arg, struct argp_state *state); static const struct argp argp = { options, parse_opt, NULL, doc }; -static const char *names_cle_err[] = { - [CLE_OK] = "CLE_OK", - [CLE_SESS_EXISTS] = "CLE_SESS_EXISTS", - [CLE_SESS_INVAL] = "CLE_SESS_INVAL", - [CLE_DB_ERR] = "CLE_DB_ERR", - [CLE_BAD_PKT] = "CLE_BAD_PKT", - [CLE_INODE_INVAL] = "CLE_INODE_INVAL", - [CLE_NAME_INVAL] = "CLE_NAME_INVAL", - [CLE_OOM] = "CLE_OOM", - [CLE_FH_INVAL] = "CLE_FH_INVAL", - [CLE_DATA_INVAL] = "CLE_DATA_INVAL", - [CLE_LOCK_INVAL] = "CLE_LOCK_INVAL", - [CLE_LOCK_CONFLICT] = "CLE_LOCK_CONFLICT", - [CLE_LOCK_PENDING] = "CLE_LOCK_PENDING", - [CLE_MODE_INVAL] = "CLE_MODE_INVAL", - [CLE_INODE_EXISTS] = "CLE_INODE_EXISTS", - [CLE_DIR_NOTEMPTY] = "CLE_DIR_NOTEMPTY", - [CLE_INTERNAL_ERR] = "CLE_INTERNAL_ERR", - [CLE_TIMEOUT] = "CLE_TIMEOUT", - [CLE_SIG_INVAL] = "CLE_SIG_INVAL", -}; - static void errc_msg(struct cresp *cresp, enum cle_err_codes errc) { - strcpy(cresp->msg, names_cle_err[errc]); + strncpy(cresp->msg, cld_errstr(errc), CRESP_MSGSZ); + cresp->msg[CRESP_MSGSZ-1] = 0; } static void applog(int prio, const char *fmt, ...) -- To unsubscribe from this list: send the line "unsubscribe hail-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html