From d1f7194a61f349bbd62ab1956001b1a905815ecb Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期二, 23 一月 2024 16:23:48 +0800
Subject: [PATCH] bug fixed
---
src/bus_error.cpp | 100 +++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 82 insertions(+), 18 deletions(-)
diff --git a/src/bus_error.cpp b/src/bus_error.cpp
index c2dd63a..3836ebf 100644
--- a/src/bus_error.cpp
+++ b/src/bus_error.cpp
@@ -11,11 +11,21 @@
static pthread_key_t strerrorKey;
-static char *_bus_errlist[_bus_nerr] = {
+static const char *_bus_errlist[_bus_nerr] = {
"\0",
- "timeout",
+ "Timed out",
"The other end is not inline",
- "Key already in use"
+ "Key already in use",
+ "Network fault",
+ "Send to self error",
+ "Receive from wrong end",
+ "Service stoped",
+ "Exceed resource limit",
+ "Service not supported",
+ "Resource busy",
+ "Resource not provide",
+ "Invalid parameters",
+ "No enough memory"
};
@@ -39,11 +49,10 @@
}
char *
-bus_strerror(int err)
+bus_strerror(int err, int flag)
{
int s;
char *buf;
-
/* Make first caller allocate key for thread-specific data */
s = pthread_once(&once, createKey);
@@ -55,24 +64,79 @@
{
/* If first call from this thread, allocate
buffer for thread, and save its location */
- buf = (char *)malloc(MAX_ERROR_LEN);
+ buf = (char *)malloc(MAX_ERROR_LEN + sizeof(int));
+ if (buf == NULL)
+ err_exit(errno, "malloc");
+
+ memset(buf, 0x00, MAX_ERROR_LEN + sizeof(int));
+ s = pthread_setspecific(strerrorKey, buf);
+ if (s != 0)
+ err_exit(s, "pthread_setspecific");
+ }
+
+ if (flag != 0) {
+ err = *(int *)(buf + MAX_ERROR_LEN);
+ }
+
+ if (err == 0) {
+ err = EBUS_BASE;
+ }
+
+ if(err < EBUS_BASE) {
+ // libc閿欒
+ if (err < 0 || err >= _sys_nerr || _sys_errlist[err] == NULL)
+ {
+ snprintf(buf, MAX_ERROR_LEN, "Unknown error %d", err);
+ }
+ else
+ {
+ strncpy(buf, _sys_errlist[err], MAX_ERROR_LEN - 1);
+ buf[MAX_ERROR_LEN - 1] = '\0'; /* Ensure null termination */
+ }
+ } else {
+ //鑷畾涔夐敊璇�
+ err -= EBUS_BASE;
+ if (err < 0 || err >= _bus_nerr || _bus_errlist[err] == NULL)
+ {
+ snprintf(buf, MAX_ERROR_LEN, "Unknown error %d", err);
+ }
+ else
+ {
+ strncpy(buf, _bus_errlist[err], MAX_ERROR_LEN - 1);
+ buf[MAX_ERROR_LEN - 1] = '\0'; /* Ensure null termination */
+ }
+
+ }
+
+ return buf;
+}
+
+void bus_errorset(int err)
+{
+ int s;
+ char *buf;
+ /* Make first caller allocate key for thread-specific data */
+ s = pthread_once(&once, createKey);
+ if (s != 0)
+ err_exit(s, "pthread_once");
+
+ buf = (char *)pthread_getspecific(strerrorKey);
+ if (buf == NULL)
+ {
+ /* If first call from this thread, allocate
+ buffer for thread, and save its location */
+ buf = (char *)malloc(MAX_ERROR_LEN + sizeof(int));
if (buf == NULL)
err_exit(errno, "malloc");
s = pthread_setspecific(strerrorKey, buf);
if (s != 0)
err_exit(s, "pthread_setspecific");
- }
+ }
+
+ *(int *)(buf + MAX_ERROR_LEN) = err;
- if (err < 0 || err >= _bus_nerr || _bus_errlist[err] == NULL)
- {
- snprintf(buf, MAX_ERROR_LEN, "Unknown error %d", err);
- }
- else
- {
- strncpy(buf, _bus_errlist[err], MAX_ERROR_LEN - 1);
- buf[MAX_ERROR_LEN - 1] = '\0'; /* Ensure null termination */
- }
-
- return buf;
}
+
+
+
--
Gitblit v1.8.0