#define ngx_string(str) { sizeof(str) - 1, (u_char *) str }
#define ngx_null_string { 0, NULL }
#define ngx_str_set(str, text) \
(str)->len = sizeof(text) - 1; (str)->data = (u_char *) text
#define ngx_str_null(str) (str)->len = 0; (str)->data = NULL
上面这四个函数,使用时一定要小心,
ngx_string
与
ngx_null_string
只能用于赋值时初始化,
ngx_string
与
ngx_str_set
在调用时,传进去的字符串一定是常量字符串,否则会得到意想不到的错误。
#define ngx_tolower(c) (u_char) ((c >= 'A' && c <= 'Z') ? (c | 0x20) : c)
#define ngx_toupper(c) (u_char) ((c >= 'a' && c <= 'z') ? (c & ~0x20) : c)
#define ngx_strncmp(s1, s2, n) strncmp((const char *) s1, (const char *) s2, n)
#define ngx_strcmp(s1, s2) strcmp((const char *) s1, (const char *) s2)
//
base64编码/解码长度
#define ngx_base64_encoded_length(len) (((len + 2) / 3) *4)
#define ngx_base64_decoded_length(len) (((len + 3) / 4) * 3)
//地址对齐宏
- #define ngx_align(d, a) (((d) + (a - 1)) & ~(a - 1))
- #define ngx_align_ptr(p, a) \
- (u_char *) (((uintptr_t) (p) + ((uintptr_t) a - 1)) & ~((uintptr_t) a - 1))
地址d + 对齐Bytes -1, 如果地址d已经是按照Bytes对齐的首地址上,则相加的结果还是在本“行”上,如果d不在对齐的首地址上,那么相加后的结果就在下一“行”上,然后对Bytes的地位字节抹去,仅保留高位字节,从而获取应该对齐的首地址