/* * _citrus_esdb_open: * open an ESDB file. */ int _citrus_esdb_open(struct _citrus_esdb *db, const char *esname) { struct _region fr; const char *realname, *encfile; char buf1[PATH_MAX], buf2[PATH_MAX], path[PATH_MAX]; int ret; snprintf(path, sizeof(path), "%s/%s", _PATH_ESDB, ESDB_ALIAS); realname = _lookup_alias(path, esname, buf1, sizeof(buf1), _LOOKUP_CASE_IGNORE); snprintf(path, sizeof(path), "%s/%s", _PATH_ESDB, ESDB_DIR); encfile = _lookup_simple(path, realname, buf2, sizeof(buf2), _LOOKUP_CASE_IGNORE); if (encfile == NULL) return (ENOENT); /* open file */ snprintf(path, sizeof(path), "%s/%s", _PATH_ESDB, encfile); ret = _map_file(&fr, path); if (ret) return (ret); ret = conv_esdb(db, &fr); _unmap_file(&fr); return (ret); }
/* * _citrus_esdb_alias: * resolve encoding scheme name aliases. */ const char * _citrus_esdb_alias(const char *esname, char *buf, size_t bufsize) { return (_lookup_alias(_PATH_ESDB "/" ESDB_ALIAS, esname, buf, bufsize, _LOOKUP_CASE_IGNORE)); }
static char * loadlocale(int category) { char aliaspath[PATH_MAX], loccat[PATH_MAX], buf[PATH_MAX]; const char *alias; _DIAGASSERT(0 < category && category < __arysize(categories)); if (strcmp(new_categories[category], current_categories[category]) == 0) return(current_categories[category]); /* (1) non-aliased file */ if (!load_locale_sub(category, new_categories[category], 0)) goto success; /* (2) lookup locname/catname type alias */ snprintf(aliaspath, sizeof(aliaspath), "%s/" _LOCALE_ALIAS_NAME, _PathLocale); snprintf(loccat, sizeof(loccat), "%s/%s", new_categories[category], categories[category].name); alias = _lookup_alias(aliaspath, loccat, buf, sizeof(buf), _LOOKUP_CASE_SENSITIVE); if (!load_locale_sub(category, alias, 1)) goto success; /* (3) lookup locname type alias */ alias = _lookup_alias(aliaspath, new_categories[category], buf, sizeof(buf), _LOOKUP_CASE_SENSITIVE); if (!load_locale_sub(category, alias, 1)) goto success; return(NULL); success: strlcpy(current_categories[category], new_categories[category], sizeof(current_categories[category])); return(current_categories[category]); }