int main(int argc, char *argv[]) { char *ns, *fname; time_t tme; int i; int argidx; argidx = parse_options(argc, argv); if (argidx < 0 || argidx > argc - 1) { fprintf(stderr, "usage: %s [-X P32] <classSchema-directory> [<classSchema-prefix>]\n", argv[0]); return -1; } if (swapMode) { void *swapLib = dlopen("libsfcObjectImplSwapI32toP32.so", RTLD_LAZY); if (swapLib == NULL) { fprintf(stderr, "--- swap library not found - %s\n", dlerror()); exit(16); } swapEntryClass = dlsym(swapLib, "swapI32toP32Class"); if (swapEntryClass == NULL) { fprintf(stderr, "--- swap entry point not found - %s\n", dlerror()); exit(16); } } fname = argv[argidx]; if (argc == argidx + 2) ns = argv[argidx + 1]; else { for (i = strlen(fname); i && fname[i] != '/'; i--); ns = fname + i + 1; } tme = time(NULL); fprintf(stdout, "/* File generated by classSchema2c %s */\n", ctime(&tme)); if (swapMode) { fprintf(stdout, "/* SWAPMODE! */\n"); } fprintf(stdout, "/* input: %s */\n", fname); fprintf(stdout, "/* ns: %s */\n\n", ns); if (newClassRegister(fname, ns) == NULL) { return -1; } return 0; }
static UtilHashTable * gatherNameSpaces(char *dn, UtilHashTable * ns, int first) { DIR *dir, *dir_test; struct dirent *de; char *n = NULL; int l; ClassRegister *cr; if (ns == NULL) { ns = UtilFactory->newHashTable(61, UtilHashTable_charKey | UtilHashTable_ignoreKeyCase); nsBaseLen = strlen(dn) + 1; } dir = opendir(dn); if (dir) while ((de = readdir(dir)) != NULL) { if (strcmp(de->d_name, ".") == 0) continue; if (strcmp(de->d_name, "..") == 0) continue; l = strlen(dn) + strlen(de->d_name) + 4; n = (char *) malloc(l + 8); strcpy(n, dn); strcat(n, "/"); strcat(n, de->d_name); dir_test = opendir(n); if (dir_test == NULL) { free(n); continue; } closedir(dir_test); cr = newClassRegister(n); if (cr) { ns->ft->put(ns, strdup(n + nsBaseLen), cr); gatherNameSpaces(n, ns, 0); } free(n); } else if (first) { mlogf(M_ERROR, M_SHOW, "--- Repository %s not found\n", dn); } closedir(dir); return ns; }
static UtilHashTable * gatherNameSpaces() { NamespaceDir *nd; UtilHashTable *ns; ClassRegister *cr; ns = UtilFactory->newHashTable(61, UtilHashTable_charKey | UtilHashTable_ignoreKeyCase); nd = sfcb_mem_namespaces; while (nd && nd->name) { cr = newClassRegister(nd->schema, nd->name); if (cr) { ns->ft->put(ns, nd->name, cr); } nd += 1; } return ns; }