1*2e9d4914SAndroid Build Coastguard Worker /* ----------------------------------------------------------------------------
2*2e9d4914SAndroid Build Coastguard Worker libconfig - A library for processing structured configuration files
3*2e9d4914SAndroid Build Coastguard Worker Copyright (C) 2005-2018 Mark A Lindner
4*2e9d4914SAndroid Build Coastguard Worker
5*2e9d4914SAndroid Build Coastguard Worker This file is part of libconfig.
6*2e9d4914SAndroid Build Coastguard Worker
7*2e9d4914SAndroid Build Coastguard Worker This library is free software; you can redistribute it and/or
8*2e9d4914SAndroid Build Coastguard Worker modify it under the terms of the GNU Lesser General Public License
9*2e9d4914SAndroid Build Coastguard Worker as published by the Free Software Foundation; either version 2.1 of
10*2e9d4914SAndroid Build Coastguard Worker the License, or (at your option) any later version.
11*2e9d4914SAndroid Build Coastguard Worker
12*2e9d4914SAndroid Build Coastguard Worker This library is distributed in the hope that it will be useful, but
13*2e9d4914SAndroid Build Coastguard Worker WITHOUT ANY WARRANTY; without even the implied warranty of
14*2e9d4914SAndroid Build Coastguard Worker MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15*2e9d4914SAndroid Build Coastguard Worker Lesser General Public License for more details.
16*2e9d4914SAndroid Build Coastguard Worker
17*2e9d4914SAndroid Build Coastguard Worker You should have received a copy of the GNU Library General Public
18*2e9d4914SAndroid Build Coastguard Worker License along with this library; if not, see
19*2e9d4914SAndroid Build Coastguard Worker <http://www.gnu.org/licenses/>.
20*2e9d4914SAndroid Build Coastguard Worker ----------------------------------------------------------------------------
21*2e9d4914SAndroid Build Coastguard Worker */
22*2e9d4914SAndroid Build Coastguard Worker
23*2e9d4914SAndroid Build Coastguard Worker #include <stdio.h>
24*2e9d4914SAndroid Build Coastguard Worker #include <stdlib.h>
25*2e9d4914SAndroid Build Coastguard Worker #include <libconfig.h>
26*2e9d4914SAndroid Build Coastguard Worker
27*2e9d4914SAndroid Build Coastguard Worker /* This example reads the configuration file 'example.cfg' and displays
28*2e9d4914SAndroid Build Coastguard Worker * some of its contents.
29*2e9d4914SAndroid Build Coastguard Worker */
30*2e9d4914SAndroid Build Coastguard Worker
main(int argc,char ** argv)31*2e9d4914SAndroid Build Coastguard Worker int main(int argc, char **argv)
32*2e9d4914SAndroid Build Coastguard Worker {
33*2e9d4914SAndroid Build Coastguard Worker config_t cfg;
34*2e9d4914SAndroid Build Coastguard Worker config_setting_t *setting;
35*2e9d4914SAndroid Build Coastguard Worker const char *str;
36*2e9d4914SAndroid Build Coastguard Worker
37*2e9d4914SAndroid Build Coastguard Worker config_init(&cfg);
38*2e9d4914SAndroid Build Coastguard Worker
39*2e9d4914SAndroid Build Coastguard Worker /* Read the file. If there is an error, report it and exit. */
40*2e9d4914SAndroid Build Coastguard Worker if(! config_read_file(&cfg, "example.cfg"))
41*2e9d4914SAndroid Build Coastguard Worker {
42*2e9d4914SAndroid Build Coastguard Worker fprintf(stderr, "%s:%d - %s\n", config_error_file(&cfg),
43*2e9d4914SAndroid Build Coastguard Worker config_error_line(&cfg), config_error_text(&cfg));
44*2e9d4914SAndroid Build Coastguard Worker config_destroy(&cfg);
45*2e9d4914SAndroid Build Coastguard Worker return(EXIT_FAILURE);
46*2e9d4914SAndroid Build Coastguard Worker }
47*2e9d4914SAndroid Build Coastguard Worker
48*2e9d4914SAndroid Build Coastguard Worker /* Get the store name. */
49*2e9d4914SAndroid Build Coastguard Worker if(config_lookup_string(&cfg, "name", &str))
50*2e9d4914SAndroid Build Coastguard Worker printf("Store name: %s\n\n", str);
51*2e9d4914SAndroid Build Coastguard Worker else
52*2e9d4914SAndroid Build Coastguard Worker fprintf(stderr, "No 'name' setting in configuration file.\n");
53*2e9d4914SAndroid Build Coastguard Worker
54*2e9d4914SAndroid Build Coastguard Worker /* Output a list of all books in the inventory. */
55*2e9d4914SAndroid Build Coastguard Worker setting = config_lookup(&cfg, "inventory.books");
56*2e9d4914SAndroid Build Coastguard Worker if(setting != NULL)
57*2e9d4914SAndroid Build Coastguard Worker {
58*2e9d4914SAndroid Build Coastguard Worker int count = config_setting_length(setting);
59*2e9d4914SAndroid Build Coastguard Worker int i;
60*2e9d4914SAndroid Build Coastguard Worker
61*2e9d4914SAndroid Build Coastguard Worker printf("%-30s %-30s %-6s %s\n", "TITLE", "AUTHOR", "PRICE", "QTY");
62*2e9d4914SAndroid Build Coastguard Worker
63*2e9d4914SAndroid Build Coastguard Worker for(i = 0; i < count; ++i)
64*2e9d4914SAndroid Build Coastguard Worker {
65*2e9d4914SAndroid Build Coastguard Worker config_setting_t *book = config_setting_get_elem(setting, i);
66*2e9d4914SAndroid Build Coastguard Worker
67*2e9d4914SAndroid Build Coastguard Worker /* Only output the record if all of the expected fields are present. */
68*2e9d4914SAndroid Build Coastguard Worker const char *title, *author;
69*2e9d4914SAndroid Build Coastguard Worker double price;
70*2e9d4914SAndroid Build Coastguard Worker int qty;
71*2e9d4914SAndroid Build Coastguard Worker
72*2e9d4914SAndroid Build Coastguard Worker if(!(config_setting_lookup_string(book, "title", &title)
73*2e9d4914SAndroid Build Coastguard Worker && config_setting_lookup_string(book, "author", &author)
74*2e9d4914SAndroid Build Coastguard Worker && config_setting_lookup_float(book, "price", &price)
75*2e9d4914SAndroid Build Coastguard Worker && config_setting_lookup_int(book, "qty", &qty)))
76*2e9d4914SAndroid Build Coastguard Worker continue;
77*2e9d4914SAndroid Build Coastguard Worker
78*2e9d4914SAndroid Build Coastguard Worker printf("%-30s %-30s $%6.2f %3d\n", title, author, price, qty);
79*2e9d4914SAndroid Build Coastguard Worker }
80*2e9d4914SAndroid Build Coastguard Worker putchar('\n');
81*2e9d4914SAndroid Build Coastguard Worker }
82*2e9d4914SAndroid Build Coastguard Worker
83*2e9d4914SAndroid Build Coastguard Worker /* Output a list of all movies in the inventory. */
84*2e9d4914SAndroid Build Coastguard Worker setting = config_lookup(&cfg, "inventory.movies");
85*2e9d4914SAndroid Build Coastguard Worker if(setting != NULL)
86*2e9d4914SAndroid Build Coastguard Worker {
87*2e9d4914SAndroid Build Coastguard Worker unsigned int count = config_setting_length(setting);
88*2e9d4914SAndroid Build Coastguard Worker unsigned int i;
89*2e9d4914SAndroid Build Coastguard Worker
90*2e9d4914SAndroid Build Coastguard Worker printf("%-30s %-10s %-6s %s\n", "TITLE", "MEDIA", "PRICE", "QTY");
91*2e9d4914SAndroid Build Coastguard Worker for(i = 0; i < count; ++i)
92*2e9d4914SAndroid Build Coastguard Worker {
93*2e9d4914SAndroid Build Coastguard Worker config_setting_t *movie = config_setting_get_elem(setting, i);
94*2e9d4914SAndroid Build Coastguard Worker
95*2e9d4914SAndroid Build Coastguard Worker /* Only output the record if all of the expected fields are present. */
96*2e9d4914SAndroid Build Coastguard Worker const char *title, *media;
97*2e9d4914SAndroid Build Coastguard Worker double price;
98*2e9d4914SAndroid Build Coastguard Worker int qty;
99*2e9d4914SAndroid Build Coastguard Worker
100*2e9d4914SAndroid Build Coastguard Worker if(!(config_setting_lookup_string(movie, "title", &title)
101*2e9d4914SAndroid Build Coastguard Worker && config_setting_lookup_string(movie, "media", &media)
102*2e9d4914SAndroid Build Coastguard Worker && config_setting_lookup_float(movie, "price", &price)
103*2e9d4914SAndroid Build Coastguard Worker && config_setting_lookup_int(movie, "qty", &qty)))
104*2e9d4914SAndroid Build Coastguard Worker continue;
105*2e9d4914SAndroid Build Coastguard Worker
106*2e9d4914SAndroid Build Coastguard Worker printf("%-30s %-10s $%6.2f %3d\n", title, media, price, qty);
107*2e9d4914SAndroid Build Coastguard Worker }
108*2e9d4914SAndroid Build Coastguard Worker putchar('\n');
109*2e9d4914SAndroid Build Coastguard Worker }
110*2e9d4914SAndroid Build Coastguard Worker
111*2e9d4914SAndroid Build Coastguard Worker config_destroy(&cfg);
112*2e9d4914SAndroid Build Coastguard Worker return(EXIT_SUCCESS);
113*2e9d4914SAndroid Build Coastguard Worker }
114*2e9d4914SAndroid Build Coastguard Worker
115*2e9d4914SAndroid Build Coastguard Worker /* eof */
116