データ構造 | |
struct | pri_list |
関数 | |
int | web_open (const char *fname, int flags, mode_t mode) |
static int | qsort_cmp_list (const void *x, const void *y) |
void | web_set_lang (const char *lang_string) |
int web_open | ( | const char * | fname, | |
int | flags, | |||
mode_t | mode | |||
) |
neg_lang.c の 30 行で定義されています。
参照先 asprintf()・fd・lang_tdb_current()・sys_open().
参照元 include_html().
00031 { 00032 char *p = NULL; 00033 char *lang = lang_tdb_current(); 00034 int fd; 00035 if (lang) { 00036 asprintf(&p, "lang/%s/%s", lang, fname); 00037 if (p) { 00038 fd = sys_open(p, flags, mode); 00039 free(p); 00040 if (fd != -1) { 00041 return fd; 00042 } 00043 } 00044 } 00045 00046 /* fall through to default name */ 00047 return sys_open(fname, flags, mode); 00048 }
static int qsort_cmp_list | ( | const void * | x, | |
const void * | y | |||
) | [static] |
neg_lang.c の 56 行で定義されています。
参照先 pri_list::pri.
参照元 web_set_lang().
00056 { 00057 struct pri_list *a = (struct pri_list *)x; 00058 struct pri_list *b = (struct pri_list *)y; 00059 if (a->pri > b->pri) return -1; 00060 if (a->pri < b->pri) return 1; 00061 return 0; 00062 }
void web_set_lang | ( | const char * | lang_string | ) |
neg_lang.c の 71 行で定義されています。
参照先 lang_tdb_init()・pri_list::pri・qsort_cmp_list()・str_list_free()・str_list_make()・string・pri_list::string.
参照元 cgi_setup().
00072 { 00073 char **lang_list, **count; 00074 struct pri_list *pl; 00075 int lang_num, i; 00076 00077 /* build the lang list */ 00078 lang_list = str_list_make(lang_string, ", \t\r\n"); 00079 if (!lang_list) return; 00080 00081 /* sort the list by priority */ 00082 lang_num = 0; 00083 count = lang_list; 00084 while (*count && **count) { 00085 count++; 00086 lang_num++; 00087 } 00088 pl = SMB_MALLOC_ARRAY(struct pri_list, lang_num); 00089 if (!pl) { 00090 return; 00091 } 00092 00093 for (i = 0; i < lang_num; i++) { 00094 char *pri_code; 00095 if ((pri_code=strstr(lang_list[i], ";q="))) { 00096 *pri_code = '\0'; 00097 pri_code += 3; 00098 sscanf(pri_code, "%f", &(pl[i].pri)); 00099 } else { 00100 pl[i].pri = 1; 00101 } 00102 pl[i].string = SMB_STRDUP(lang_list[i]); 00103 } 00104 str_list_free(&lang_list); 00105 00106 qsort(pl, lang_num, sizeof(struct pri_list), &qsort_cmp_list); 00107 00108 /* it's not an error to not initialise - we just fall back to 00109 the default */ 00110 00111 for (i = 0; i < lang_num; i++) { 00112 if (lang_tdb_init(pl[i].string)) break; 00113 } 00114 00115 for (i = 0; i < lang_num; i++) { 00116 SAFE_FREE(pl[i].string); 00117 } 00118 SAFE_FREE(pl); 00119 00120 return; 00121 }