马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define NGX_SYS_NERR 132
#define NGX_OK 0 //src/core/ngx_core.h:36
#define NGX_ERROR -1 //src/core/ngx_core.h:37
#define ngx_strlen(s) strlen((const char *) s) //src/core/ngx_string:61
typedef unsigned char u_char;
typedef int ngx_err_t; //src/os/unix/ngx_errno.h:16
typedef struct { //src/core/ngx_string.h:16
size_t len;
u_char *data;
} ngx_str_t;
static ngx_str_t *ngx_sys_errlist; //src/os/unix/ngx_errno.h:28
void * //src/core/ngx_string.h:1965
ngx_memcpy(void *dst, const void *src, size_t n) {
// if (n > NGX_MEMCPY_LIMIT) {
// ngx_log_error(NGX_LOG_ALETER, ngx_cycle->log, 0, "memcpy %uz bytes", n);
// ngx_debug_point();
// }
return memcpy(dst, src, n);
}
int
ngx_strerror_init(void) {
char *msg;
u_char *p;
size_t len;
ngx_err_t err;
len = NGX_SYS_NERR * sizeof(ngx_str_t);
ngx_sys_errlist = malloc(len);
if (ngx_sys_errlist == NULL) {
goto failed;
}
for ( err = 0; err < NGX_SYS_NERR; err++) {
msg = strerror(err); // get error infor from number by using system function strerror()
len = ngx_strlen(msg);
p = malloc(len); //get a memory for current error string by use malloc(), which return a char pointer
if( p == NULL ) {
goto failed;
}
ngx_memcpy(p, msg, len);
ngx_sys_errlist[err].len = len;
ngx_sys_errlist[err].data = p;
}
return NGX_OK;
failed:
// err = errno;
// ngx_log_stderr(0, "malloc(%uz) failed (%d: %s)", len, err, strerror(err));
return NGX_ERROR;
}
int
main(int argc, char ** argv) {
//call the ngx_strerror_init() function to get the table of ngx_sys_errlist
if (ngx_strerror_init() == NGX_OK) {
int i;
for (i = 0; i < NGX_SYS_NERR; i++) {
printf("%d\t%d\t%s\n", i, ngx_sys_errlist[i].len, ngx_sys_errlist[i].data);
}
}
return 0;
}
因为只先考虑了函数实现,但是这之中的日志处理,暂时将其注释了,,,还有待研究研究。。。唉,,,必须努力啊
。。。
|