int lmo_load_catalog(const char *lang, const char *dir) { DIR *dh = NULL; char pattern[16]; char path[PATH_MAX]; struct dirent *de = NULL; lmo_archive_t *ar = NULL; lmo_catalog_t *cat = NULL; if (!lmo_change_catalog(lang)) return 0; if (!dir || !(dh = opendir(dir))) goto err; if (!(cat = malloc(sizeof(*cat)))) goto err; memset(cat, 0, sizeof(*cat)); snprintf(cat->lang, sizeof(cat->lang), "%s", lang); snprintf(pattern, sizeof(pattern), "*.%s.lmo", lang); while ((de = readdir(dh)) != NULL) { if (!fnmatch(pattern, de->d_name, 0)) { snprintf(path, sizeof(path), "%s/%s", dir, de->d_name); ar = lmo_open(path); if (ar) { ar->next = cat->archives; cat->archives = ar; } } } closedir(dh); cat->next = _lmo_catalogs; _lmo_catalogs = cat; if (!_lmo_active_catalog) _lmo_active_catalog = cat; return 0; err: if (dh) closedir(dh); if (cat) free(cat); return -1; }
int main(int argc, char *argv[]) { char val[4096]; lmo_archive_t *ar = NULL; if( argc != 3 ) usage(argv[0]); if( (ar = (lmo_archive_t *) lmo_open(argv[1])) != NULL ) { if( lmo_lookup(ar, argv[2], val, sizeof(val)) > -1 ) { printf("%s\n", val); } lmo_close(ar); } else { die(lmo_error()); } return 0; }