Fu Juntang
2021-09-17 5c912c70e9333298ff48f7ea15424f72ca977b99
src/bus_error.cpp
@@ -49,15 +49,11 @@
}
char *
bus_strerror(int err)
bus_strerror(int err, int flag)
{
  int s;
  char *buf;
  /* Make first caller allocate key for thread-specific data */
  if (err == 0) {
    err = EBUS_BASE;
  }
  s = pthread_once(&once, createKey);
  if (s != 0)
@@ -68,15 +64,23 @@
  {
    /* 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错误
@@ -106,3 +110,33 @@
  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;
}