📄 config_file.c
字号:
const krb5_config_binding **pointer, int type, const char *name, va_list args){ const char *p = va_arg(args, const char *); while(b != NULL) { if(strcmp(b->name, name) == 0) { if(b->type == type && p == NULL) { *pointer = b; return b->u.generic; } else if(b->type == krb5_config_list && p != NULL) { return vget_next(context, b->u.list, pointer, type, p, args); } } b = b->next; } return NULL;}const void *krb5_config_vget_next (krb5_context context, const krb5_config_section *c, const krb5_config_binding **pointer, int type, va_list args){ const krb5_config_binding *b; const char *p; if(c == NULL) c = context->cf; if (c == NULL) return NULL; if (*pointer == NULL) { /* first time here, walk down the tree looking for the right section */ p = va_arg(args, const char *); if (p == NULL) return NULL; return vget_next(context, c, pointer, type, p, args); } /* we were called again, so just look for more entries with the same name and type */ for (b = (*pointer)->next; b != NULL; b = b->next) { if(strcmp(b->name, (*pointer)->name) == 0 && b->type == type) { *pointer = b; return b->u.generic; } } return NULL;}const void *krb5_config_get (krb5_context context, const krb5_config_section *c, int type, ...){ const void *ret; va_list args; va_start(args, type); ret = krb5_config_vget (context, c, type, args); va_end(args); return ret;}const void *krb5_config_vget (krb5_context context, const krb5_config_section *c, int type, va_list args){ const krb5_config_binding *foo = NULL; return krb5_config_vget_next (context, c, &foo, type, args);}const krb5_config_binding *krb5_config_get_list (krb5_context context, const krb5_config_section *c, ...){ const krb5_config_binding *ret; va_list args; va_start(args, c); ret = krb5_config_vget_list (context, c, args); va_end(args); return ret;}const krb5_config_binding *krb5_config_vget_list (krb5_context context, const krb5_config_section *c, va_list args){ return krb5_config_vget (context, c, krb5_config_list, args);}const char* KRB5_LIB_FUNCTIONkrb5_config_get_string (krb5_context context, const krb5_config_section *c, ...){ const char *ret; va_list args; va_start(args, c); ret = krb5_config_vget_string (context, c, args); va_end(args); return ret;}const char* KRB5_LIB_FUNCTIONkrb5_config_vget_string (krb5_context context, const krb5_config_section *c, va_list args){ return krb5_config_vget (context, c, krb5_config_string, args);}const char* KRB5_LIB_FUNCTIONkrb5_config_vget_string_default (krb5_context context, const krb5_config_section *c, const char *def_value, va_list args){ const char *ret; ret = krb5_config_vget_string (context, c, args); if (ret == NULL) ret = def_value; return ret;}const char* KRB5_LIB_FUNCTIONkrb5_config_get_string_default (krb5_context context, const krb5_config_section *c, const char *def_value, ...){ const char *ret; va_list args; va_start(args, def_value); ret = krb5_config_vget_string_default (context, c, def_value, args); va_end(args); return ret;}char ** KRB5_LIB_FUNCTIONkrb5_config_vget_strings(krb5_context context, const krb5_config_section *c, va_list args){ char **strings = NULL; int nstr = 0; const krb5_config_binding *b = NULL; const char *p; while((p = krb5_config_vget_next(context, c, &b, krb5_config_string, args))) { char *tmp = strdup(p); char *pos = NULL; char *s; if(tmp == NULL) goto cleanup; s = strtok_r(tmp, " \t", &pos); while(s){ char **tmp2 = realloc(strings, (nstr + 1) * sizeof(*strings)); if(tmp2 == NULL) goto cleanup; strings = tmp2; strings[nstr] = strdup(s); nstr++; if(strings[nstr-1] == NULL) goto cleanup; s = strtok_r(NULL, " \t", &pos); } free(tmp); } if(nstr){ char **tmp = realloc(strings, (nstr + 1) * sizeof(*strings)); if(tmp == NULL) goto cleanup; strings = tmp; strings[nstr] = NULL; } return strings;cleanup: while(nstr--) free(strings[nstr]); free(strings); return NULL;}char**krb5_config_get_strings(krb5_context context, const krb5_config_section *c, ...){ va_list ap; char **ret; va_start(ap, c); ret = krb5_config_vget_strings(context, c, ap); va_end(ap); return ret;}void KRB5_LIB_FUNCTIONkrb5_config_free_strings(char **strings){ char **s = strings; while(s && *s){ free(*s); s++; } free(strings);}krb5_boolean KRB5_LIB_FUNCTIONkrb5_config_vget_bool_default (krb5_context context, const krb5_config_section *c, krb5_boolean def_value, va_list args){ const char *str; str = krb5_config_vget_string (context, c, args); if(str == NULL) return def_value; if(strcasecmp(str, "yes") == 0 || strcasecmp(str, "true") == 0 || atoi(str)) return TRUE; return FALSE;}krb5_boolean KRB5_LIB_FUNCTIONkrb5_config_vget_bool (krb5_context context, const krb5_config_section *c, va_list args){ return krb5_config_vget_bool_default (context, c, FALSE, args);}krb5_boolean KRB5_LIB_FUNCTIONkrb5_config_get_bool_default (krb5_context context, const krb5_config_section *c, krb5_boolean def_value, ...){ va_list ap; krb5_boolean ret; va_start(ap, def_value); ret = krb5_config_vget_bool_default(context, c, def_value, ap); va_end(ap); return ret;}krb5_boolean KRB5_LIB_FUNCTIONkrb5_config_get_bool (krb5_context context, const krb5_config_section *c, ...){ va_list ap; krb5_boolean ret; va_start(ap, c); ret = krb5_config_vget_bool (context, c, ap); va_end(ap); return ret;}int KRB5_LIB_FUNCTIONkrb5_config_vget_time_default (krb5_context context, const krb5_config_section *c, int def_value, va_list args){ const char *str; krb5_deltat t; str = krb5_config_vget_string (context, c, args); if(str == NULL) return def_value; if (krb5_string_to_deltat(str, &t)) return def_value; return t;}int KRB5_LIB_FUNCTIONkrb5_config_vget_time (krb5_context context, const krb5_config_section *c, va_list args){ return krb5_config_vget_time_default (context, c, -1, args);}int KRB5_LIB_FUNCTIONkrb5_config_get_time_default (krb5_context context, const krb5_config_section *c, int def_value, ...){ va_list ap; int ret; va_start(ap, def_value); ret = krb5_config_vget_time_default(context, c, def_value, ap); va_end(ap); return ret;}int KRB5_LIB_FUNCTIONkrb5_config_get_time (krb5_context context, const krb5_config_section *c, ...){ va_list ap; int ret; va_start(ap, c); ret = krb5_config_vget_time (context, c, ap); va_end(ap); return ret;}int KRB5_LIB_FUNCTIONkrb5_config_vget_int_default (krb5_context context, const krb5_config_section *c, int def_value, va_list args){ const char *str; str = krb5_config_vget_string (context, c, args); if(str == NULL) return def_value; else { char *endptr; long l; l = strtol(str, &endptr, 0); if (endptr == str) return def_value; else return l; }}int KRB5_LIB_FUNCTIONkrb5_config_vget_int (krb5_context context, const krb5_config_section *c, va_list args){ return krb5_config_vget_int_default (context, c, -1, args);}int KRB5_LIB_FUNCTIONkrb5_config_get_int_default (krb5_context context, const krb5_config_section *c, int def_value, ...){ va_list ap; int ret; va_start(ap, def_value); ret = krb5_config_vget_int_default(context, c, def_value, ap); va_end(ap); return ret;}int KRB5_LIB_FUNCTIONkrb5_config_get_int (krb5_context context, const krb5_config_section *c, ...){ va_list ap; int ret; va_start(ap, c); ret = krb5_config_vget_int (context, c, ap); va_end(ap); return ret;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -