1
- #include "cfg.h"
1
+ /*
2
+ * Simple config parser
3
+ *
4
+ * Copyright (c) 2017 Christopher Haster
5
+ * Distributed under the MIT license
6
+ */
7
+ #include "emubd/lfs_cfg.h"
2
8
3
9
#include <stdlib.h>
4
10
#include <errno.h>
5
11
#include <string.h>
6
12
#include <stdio.h>
7
13
8
14
9
- static int cfg_buffer ( cfg_t * cfg , char c ) {
15
+ static int lfs_cfg_buffer ( lfs_cfg_t * cfg , char c ) {
10
16
// Amortize double
11
17
if (cfg -> blen == cfg -> bsize ) {
12
18
size_t nsize = cfg -> bsize * 2 ;
@@ -26,16 +32,16 @@ static int cfg_buffer(cfg_t *cfg, char c) {
26
32
return 0 ;
27
33
}
28
34
29
- static int cfg_attr ( cfg_t * cfg , unsigned key , unsigned val ) {
35
+ static int lfs_cfg_attr ( lfs_cfg_t * cfg , unsigned key , unsigned val ) {
30
36
// Amortize double
31
37
if (cfg -> len == cfg -> size ) {
32
38
size_t nsize = cfg -> size * 2 ;
33
- struct cfg_attr * nattrs = malloc (nsize * sizeof (struct cfg_attr ));
39
+ struct lfs_cfg_attr * nattrs = malloc (nsize * sizeof (struct lfs_cfg_attr ));
34
40
if (!nattrs ) {
35
41
return - ENOMEM ;
36
42
}
37
43
38
- memcpy (nattrs , cfg -> attrs , cfg -> size * sizeof (struct cfg_attr ));
44
+ memcpy (nattrs , cfg -> attrs , cfg -> size * sizeof (struct lfs_cfg_attr ));
39
45
free (cfg -> attrs );
40
46
cfg -> attrs = nattrs ;
41
47
cfg -> size = nsize ;
@@ -50,14 +56,14 @@ static int cfg_attr(cfg_t *cfg, unsigned key, unsigned val) {
50
56
}
51
57
52
58
memmove (& cfg -> attrs [i + 1 ], & cfg -> attrs [i ],
53
- (cfg -> size - i )* sizeof (struct cfg_attr ));
59
+ (cfg -> size - i )* sizeof (struct lfs_cfg_attr ));
54
60
cfg -> attrs [i ].key = key ;
55
61
cfg -> attrs [i ].val = val ;
56
62
cfg -> len += 1 ;
57
63
return 0 ;
58
64
}
59
65
60
- static bool cfg_match (FILE * f , const char * matches ) {
66
+ static bool lfs_cfg_match (FILE * f , const char * matches ) {
61
67
char c = getc (f );
62
68
ungetc (c , f );
63
69
@@ -70,11 +76,11 @@ static bool cfg_match(FILE *f, const char *matches) {
70
76
return false;
71
77
}
72
78
73
- int cfg_create ( cfg_t * cfg , const char * filename ) {
79
+ int lfs_cfg_create ( lfs_cfg_t * cfg , const char * filename ) {
74
80
// start with some initial space
75
81
cfg -> len = 0 ;
76
82
cfg -> size = 4 ;
77
- cfg -> attrs = malloc (cfg -> size * sizeof (struct cfg_attr ));
83
+ cfg -> attrs = malloc (cfg -> size * sizeof (struct lfs_cfg_attr ));
78
84
79
85
cfg -> blen = 0 ;
80
86
cfg -> bsize = 16 ;
@@ -88,50 +94,50 @@ int cfg_create(cfg_t *cfg, const char *filename) {
88
94
while (!feof (f )) {
89
95
int err ;
90
96
91
- while (cfg_match (f , " \t\v\f" )) {
97
+ while (lfs_cfg_match (f , " \t\v\f" )) {
92
98
fgetc (f );
93
99
}
94
100
95
- if (!cfg_match (f , "#\r\n" )) {
101
+ if (!lfs_cfg_match (f , "#\r\n" )) {
96
102
unsigned key = cfg -> blen ;
97
- while (!cfg_match (f , " \t\v\f:#" ) && !feof (f )) {
98
- if ((err = cfg_buffer (cfg , fgetc (f )))) {
103
+ while (!lfs_cfg_match (f , " \t\v\f:#" ) && !feof (f )) {
104
+ if ((err = lfs_cfg_buffer (cfg , fgetc (f )))) {
99
105
return err ;
100
106
}
101
107
}
102
- if ((err = cfg_buffer (cfg , 0 ))) {
108
+ if ((err = lfs_cfg_buffer (cfg , 0 ))) {
103
109
return err ;
104
110
}
105
111
106
- while (cfg_match (f , " \t\v\f" )) {
112
+ while (lfs_cfg_match (f , " \t\v\f" )) {
107
113
fgetc (f );
108
114
}
109
115
110
- if (cfg_match (f , ":" )) {
116
+ if (lfs_cfg_match (f , ":" )) {
111
117
fgetc (f );
112
- while (cfg_match (f , " \t\v\f" )) {
118
+ while (lfs_cfg_match (f , " \t\v\f" )) {
113
119
fgetc (f );
114
120
}
115
121
116
122
unsigned val = cfg -> blen ;
117
- while (!cfg_match (f , " \t\v\f#\r\n" ) && !feof (f )) {
118
- if ((err = cfg_buffer (cfg , fgetc (f )))) {
123
+ while (!lfs_cfg_match (f , " \t\v\f#\r\n" ) && !feof (f )) {
124
+ if ((err = lfs_cfg_buffer (cfg , fgetc (f )))) {
119
125
return err ;
120
126
}
121
127
}
122
- if ((err = cfg_buffer (cfg , 0 ))) {
128
+ if ((err = lfs_cfg_buffer (cfg , 0 ))) {
123
129
return err ;
124
130
}
125
131
126
- if ((err = cfg_attr (cfg , key , val ))) {
132
+ if ((err = lfs_cfg_attr (cfg , key , val ))) {
127
133
return err ;
128
134
}
129
135
} else {
130
136
cfg -> blen = key ;
131
137
}
132
138
}
133
139
134
- while (!cfg_match (f , "\r\n" ) && !feof (f )) {
140
+ while (!lfs_cfg_match (f , "\r\n" ) && !feof (f )) {
135
141
fgetc (f );
136
142
}
137
143
fgetc (f );
@@ -140,15 +146,15 @@ int cfg_create(cfg_t *cfg, const char *filename) {
140
146
return 0 ;
141
147
}
142
148
143
- void cfg_destroy ( cfg_t * cfg ) {
149
+ void lfs_cfg_destroy ( lfs_cfg_t * cfg ) {
144
150
free (cfg -> attrs );
145
151
}
146
152
147
- bool cfg_has ( cfg_t * cfg , const char * key ) {
148
- return cfg_get (cfg , key , 0 );
153
+ bool lfs_cfg_has ( lfs_cfg_t * cfg , const char * key ) {
154
+ return lfs_cfg_get (cfg , key , 0 );
149
155
}
150
156
151
- const char * cfg_get ( cfg_t * cfg , const char * key , const char * def ) {
157
+ const char * lfs_cfg_get ( lfs_cfg_t * cfg , const char * key , const char * def ) {
152
158
// binary search for attribute
153
159
int lo = 0 ;
154
160
int hi = cfg -> len - 1 ;
@@ -168,8 +174,8 @@ const char *cfg_get(cfg_t *cfg, const char *key, const char *def) {
168
174
return def ;
169
175
}
170
176
171
- ssize_t cfg_geti ( cfg_t * cfg , const char * key , ssize_t def ) {
172
- const char * val = cfg_get (cfg , key , 0 );
177
+ ssize_t lfs_cfg_geti ( lfs_cfg_t * cfg , const char * key , ssize_t def ) {
178
+ const char * val = lfs_cfg_get (cfg , key , 0 );
173
179
if (!val ) {
174
180
return def ;
175
181
}
@@ -179,8 +185,8 @@ ssize_t cfg_geti(cfg_t *cfg, const char *key, ssize_t def) {
179
185
return (end == val ) ? def : res ;
180
186
}
181
187
182
- size_t cfg_getu ( cfg_t * cfg , const char * key , size_t def ) {
183
- const char * val = cfg_get (cfg , key , 0 );
188
+ size_t lfs_cfg_getu ( lfs_cfg_t * cfg , const char * key , size_t def ) {
189
+ const char * val = lfs_cfg_get (cfg , key , 0 );
184
190
if (!val ) {
185
191
return def ;
186
192
}
0 commit comments