/* * Searches for a inventory item based on that item's name. The search is * performed using the item name secondary database. Displays all * inventory items that use the specified name, as well as the vendor * associated with that inventory item. * * If no item name is provided, then all inventory items are displayed. */ int main(int argc, char *argv[]) { STOCK_DBS my_stock; int ch, ret; char *itemname; /* Initialize the STOCK_DBS struct */ initialize_stockdbs(&my_stock); /* Parse the command line arguments */ itemname = NULL; while ((ch = getopt(argc, argv, "h:i:?")) != EOF) switch (ch) { case 'h': if (optarg[strlen(optarg)-1] != '/' && optarg[strlen(optarg)-1] != '\\') return (usage()); my_stock.db_home_dir = optarg; break; case 'i': itemname = optarg; break; case '?': default: return (usage()); } /* Identify the files that hold our databases */ set_db_filenames(&my_stock); /* Open all databases */ ret = databases_setup(&my_stock, "example_database_read", stderr); if (ret != 0) { fprintf(stderr, "Error opening databases\n"); databases_close(&my_stock); return (ret); } if (itemname == NULL) ret = show_all_records(&my_stock); else ret = show_records(&my_stock, itemname); /* close our databases */ databases_close(&my_stock); return (ret); }
/* * Loads the contents of vendors.txt and inventory.txt into * Berkeley DB databases. Also causes the itemname secondary * database to be created and loaded. */ int main(int argc, char *argv[]) { STOCK_DBS my_stock; int ch, ret; size_t size; char *basename, *inventory_file, *vendor_file; /* Initialize the STOCK_DBS struct */ initialize_stockdbs(&my_stock); /* Initialize the base path. */ basename = "./"; /* Parse the command line arguments */ while ((ch = getopt(argc, argv, "b:h:")) != EOF) switch (ch) { case 'h': if (optarg[strlen(optarg)-1] != '/' && optarg[strlen(optarg)-1] != '\\') return (usage()); my_stock.db_home_dir = optarg; break; case 'b': if (basename[strlen(basename)-1] != '/' && basename[strlen(basename)-1] != '\\') return (usage()); basename = optarg; break; case '?': default: return (usage()); } /* Identify the files that will hold our databases */ set_db_filenames(&my_stock); /* Find our input files */ size = strlen(basename) + strlen(INVENTORY_FILE) + 1; inventory_file = malloc(size); snprintf(inventory_file, size, "%s%s", basename, INVENTORY_FILE); size = strlen(basename) + strlen(VENDORS_FILE) + 1; vendor_file = malloc(size); snprintf(vendor_file, size, "%s%s", basename, VENDORS_FILE); /* Open all databases */ ret = databases_setup(&my_stock, "example_database_load", stderr); if (ret) { fprintf(stderr, "Error opening databases\n"); databases_close(&my_stock); return (ret); } ret = load_vendors_database(my_stock, vendor_file); if (ret) { fprintf(stderr, "Error loading vendors database.\n"); databases_close(&my_stock); return (ret); } ret = load_inventory_database(my_stock, inventory_file); if (ret) { fprintf(stderr, "Error loading inventory database.\n"); databases_close(&my_stock); return (ret); } /* close our environment and databases */ databases_close(&my_stock); printf("Done loading databases.\n"); return (ret); }