Skip to content

Commit 14f881f

Browse files
authored
Merge pull request #28 from allanjude/nofoldcase
Don't fold case by default
2 parents e61e069 + a90d4e5 commit 14f881f

12 files changed

+149
-102
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ EXECUTABLE=uclcmd
1111

1212
all: $(SRCS) $(EXECUTABLE)
1313

14-
$(EXECUTABLE): $(OBJS)
14+
$(EXECUTABLE): $(OBJS) uclcmd.h
1515
$(CC) $(LDFLAGS) $(LIBS) -o $(EXECUTABLE) $(OBJS)
1616

1717
clean:

tests/include-merge-high_01.res

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,10 @@
11
vm1 {
2-
cpus [
3-
1,
4-
2,
5-
]
2+
cpus = 2;
63
origin = 4;
74
mode = "merge";
85
sub {
96
a = "b";
10-
c [
11-
"d",
12-
"e",
13-
]
7+
c = "e";
148
foo = "bar";
159
}
1610
from = "test";

tests/include-merge-low_01.res

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,10 @@
11
vm1 {
2-
cpus [
3-
1,
4-
2,
5-
]
2+
cpus = 1;
63
origin = 4;
74
mode = "merge";
85
sub {
96
a = "b";
10-
c [
11-
"d",
12-
"e",
13-
]
7+
c = "d";
148
foo = "bar";
159
}
1610
from = "test";

tests/set_08.res

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ rootkey {
88
"b",
99
"c",
1010
]
11-
new = 1103760000.0;
11+
new = 157680000.0;
1212
}

uclcmd.c

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636

3737
int debug = 0, expand = 0, mode = 0, noop = 0, nonewline = 0;
3838
int show_keys = 0, show_raw = 0;
39+
int pflags = 0;
3940
bool firstline = true, shvars = false;
4041
int output_type = 254;
4142
ucl_object_t *root_obj = NULL;
@@ -70,6 +71,7 @@ main(int argc, char *argv[])
7071
{ "del", remove_main },
7172
{ "dump", output_main },
7273
{ "help", (verb_func_t) usage },
74+
{ "version", (verb_func_t) version },
7375
{ NULL, NULL }
7476
};
7577

@@ -109,17 +111,18 @@ void
109111
usage()
110112
{
111113
fprintf(stderr, "%s\n",
112-
"Usage: uclcmd get [-cdejklmNquy] [-D char] [-f file] [-o file] variable\n"
113-
" uclcmd set [-cdjmnuy] [-t type] [-D char] [-f file] [-i file] [-o file] variable [UCL]\n"
114-
" uclcmd merge [-cdjmnuy] [-D char] [-f file] [-i file] [-o file] variable\n"
115-
" uclcmd remove [-cdjmnuy] [-D char] [-f file] [-o file] variable\n"
114+
"Usage: uclcmd get [-cdeIjklmNquy] [-D char] [-f file] [-o file] variable\n"
115+
" uclcmd set [-cdIjmnuy] [-t type] [-D char] [-f file] [-i file] [-o file] variable [UCL]\n"
116+
" uclcmd merge [-cdIjmnuy] [-D char] [-f file] [-i file] [-o file] variable\n"
117+
" uclcmd remove [-cdIjmnuy] [-D char] [-f file] [-o file] variable\n"
116118
"\n"
117119
"COMMON OPTIONS:\n"
118120
" -c --cjson output compacted JSON\n"
119121
" -d --debug enable verbose debugging output\n"
120122
" -D --delimiter character to use as element delimiter (default is .)\n"
121123
" -e --expand Output the list of keys when encountering an object\n"
122124
" -f --file path to a file to read or write\n"
125+
" -I --foldcase fold all keys to lowercase (make matching insensitive)\n"
123126
" -j --json output pretty JSON\n"
124127
" -k --keys show key=value rather than just the value\n"
125128
" -l --shellvars keys are output with underscores as delimiter\n"
@@ -157,6 +160,13 @@ usage()
157160
exit(1);
158161
}
159162

163+
void
164+
version()
165+
{
166+
167+
fprintf(stderr, "uclcmd version %s\n", UCLCMD_VERSION_STRING);
168+
}
169+
160170
void
161171
cleanup()
162172
{

uclcmd.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,23 @@
4747

4848
#include <ucl.h>
4949

50+
#define QUOTE(str) #str
51+
#define EXPAND_AND_QUOTE(str) QUOTE(str)
5052
#ifndef __DECONST
5153
#define __DECONST(type, var) ((type)(uintptr_t)(const void *)(var))
5254
#endif
5355

56+
#define UCLCMD_VERSION_MAJOR 0
57+
#define UCLCMD_VERSION_MINOR 2
58+
#define UCLCMD_VERSION_PATCH 20211204
59+
#define UCLCMD_VERSION UCLCMD_VERSION_MAJOR.UCLCMD_VERSION_MINOR.UCLCMD_VERSION_PATCH
60+
#define UCLCMD_VERSION_STRING EXPAND_AND_QUOTE(UCLCMD_VERSION)
61+
5462
#define UCLCMD_PARSER_FLAGS UCL_PARSER_NO_IMPLICIT_ARRAYS | \
5563
UCL_PARSER_SAVE_COMMENTS
5664

5765
extern int debug, expand, noop, nonewline, show_keys, show_raw;
66+
extern int pflags;
5867
extern bool firstline, shvars;
5968
extern int output_type;
6069
extern ucl_object_t *root_obj;
@@ -106,6 +115,7 @@ char * objtype_as_string (const ucl_object_t *obj);
106115
void ucl_obj_dump(const ucl_object_t *obj, unsigned int shift);
107116
void ucl_obj_dump_safe(const ucl_object_t *obj, unsigned int shift);
108117
void usage();
118+
void version();
109119

110120
int get_cmd_each(const ucl_object_t *obj, char *nodepath,
111121
const char *command_str, char *remaining_commands, int recurse);

uclcmd_get.c

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,6 @@ get_main(int argc, char *argv[])
3333
{
3434
int ret = 0, k = 0, ch;
3535

36-
/* Initialize parser */
37-
parser = ucl_parser_new(UCLCMD_PARSER_FLAGS | UCL_PARSER_KEY_LOWERCASE);
38-
3936
/* options descriptor */
4037
static struct option longopts[] = {
4138
{ "cjson", no_argument, &output_type,
@@ -48,6 +45,7 @@ get_main(int argc, char *argv[])
4845
UCL_EMIT_JSON },
4946
{ "keys", no_argument, &show_keys, 1 },
5047
{ "input", no_argument, NULL, 'i' },
48+
{ "foldcase", no_argument, NULL, 'I' },
5149
{ "msgpack", no_argument, &output_type,
5250
UCL_EMIT_MSGPACK },
5351
{ "noop", no_argument, &noop, 1 },
@@ -61,7 +59,7 @@ get_main(int argc, char *argv[])
6159
{ NULL, 0, NULL, 0 }
6260
};
6361

64-
while ((ch = getopt_long(argc, argv, "cdD:ef:i:jklmnNo:quy", longopts, NULL)) != -1) {
62+
while ((ch = getopt_long(argc, argv, "cdD:ef:i:IjklmnNo:quy", longopts, NULL)) != -1) {
6563
switch (ch) {
6664
case 'c':
6765
output_type = UCL_EMIT_JSON_COMPACT;
@@ -82,17 +80,14 @@ get_main(int argc, char *argv[])
8280
break;
8381
case 'f':
8482
filename = optarg;
85-
if (strcmp(optarg, "-") == 0) {
86-
/* Input from STDIN */
87-
root_obj = parse_input(parser, stdin);
88-
} else {
89-
root_obj = parse_file(parser, filename);
90-
}
9183
break;
9284
case 'i':
9385
fprintf(stderr, "Not implemented yet\n");
9486
exit(1);
9587
break;
88+
case 'I':
89+
pflags |= UCL_PARSER_KEY_LOWERCASE;
90+
break;
9691
case 'j':
9792
output_type = UCL_EMIT_JSON;
9893
break;
@@ -140,8 +135,14 @@ get_main(int argc, char *argv[])
140135
usage();
141136
}
142137

143-
if (filename == NULL) {
138+
/* Initialize parser */
139+
parser = ucl_parser_new(UCLCMD_PARSER_FLAGS | pflags);
140+
141+
if (filename == NULL || strcmp(filename, "-") == 0) {
142+
/* Input from STDIN */
144143
root_obj = parse_input(parser, stdin);
144+
} else {
145+
root_obj = parse_file(parser, filename);
145146
}
146147

147148
for (k = 0; k < argc; k++) {

uclcmd_merge.c

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,6 @@ merge_main(int argc, char *argv[])
3434
int ret = 0, ch;
3535
bool success = false;
3636

37-
/* Initialize parser */
38-
parser = ucl_parser_new(UCLCMD_PARSER_FLAGS);
39-
4037
/* Set the default output type */
4138
output_type = UCL_EMIT_CONFIG;
4239

@@ -52,6 +49,7 @@ merge_main(int argc, char *argv[])
5249
UCL_EMIT_JSON },
5350
{ "keys", no_argument, &show_keys, 1 },
5451
{ "input", no_argument, NULL, 'i' },
52+
{ "foldcase", no_argument, NULL, 'I' },
5553
{ "msgpack", no_argument, &output_type,
5654
UCL_EMIT_MSGPACK },
5755
{ "noop", no_argument, &noop, 1 },
@@ -65,7 +63,7 @@ merge_main(int argc, char *argv[])
6563
{ NULL, 0, NULL, 0 }
6664
};
6765

68-
while ((ch = getopt_long(argc, argv, "cdD:ef:i:jklmnNo:quy", longopts, NULL)) != -1) {
66+
while ((ch = getopt_long(argc, argv, "cdD:ef:i:IjklmnNo:quy", longopts, NULL)) != -1) {
6967
switch (ch) {
7068
case 'c':
7169
output_type = UCL_EMIT_JSON_COMPACT;
@@ -86,16 +84,13 @@ merge_main(int argc, char *argv[])
8684
break;
8785
case 'f':
8886
filename = optarg;
89-
if (strcmp(optarg, "-") == 0) {
90-
/* Input from STDIN */
91-
root_obj = parse_input(parser, stdin);
92-
} else {
93-
root_obj = parse_file(parser, filename);
94-
}
9587
break;
9688
case 'i':
9789
include_file = optarg;
9890
break;
91+
case 'I':
92+
pflags |= UCL_PARSER_KEY_LOWERCASE;
93+
break;
9994
case 'j':
10095
output_type = UCL_EMIT_JSON;
10196
break;
@@ -142,8 +137,14 @@ merge_main(int argc, char *argv[])
142137
usage();
143138
}
144139

145-
if (filename == NULL) {
140+
/* Initialize parser */
141+
parser = ucl_parser_new(UCLCMD_PARSER_FLAGS | pflags);
142+
143+
if (filename == NULL || strcmp(filename, "-") == 0) {
144+
/* Input from STDIN */
146145
root_obj = parse_input(parser, stdin);
146+
} else {
147+
root_obj = parse_file(parser, filename);
147148
}
148149

149150
if (argc > 1) { /* XXX: need test for if > 2 inputs */

uclcmd_output.c

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,31 +34,26 @@ output_main(int argc, char *argv[])
3434
const char *filename = NULL;
3535
int ret = 0, ch;
3636

37-
/* Initialize parser */
38-
parser = ucl_parser_new(UCLCMD_PARSER_FLAGS);
39-
4037
/* options descriptor */
4138
static struct option longopts[] = {
4239
{ "file", required_argument, NULL, 'f' },
4340
{ "input", no_argument, NULL, 'i' },
41+
{ "foldcase", no_argument, NULL, 'I' },
4442
{ NULL, 0, NULL, 0 }
4543
};
4644

47-
while ((ch = getopt_long(argc, argv, "f:i:", longopts, NULL)) != -1) {
45+
while ((ch = getopt_long(argc, argv, "f:i:I", longopts, NULL)) != -1) {
4846
switch (ch) {
4947
case 'f':
5048
filename = optarg;
51-
if (strcmp(optarg, "-") == 0) {
52-
/* Input from STDIN */
53-
root_obj = parse_input(parser, stdin);
54-
} else {
55-
root_obj = parse_file(parser, filename);
56-
}
5749
break;
5850
case 'i':
5951
fprintf(stderr, "Not implemented yet\n");
6052
exit(1);
6153
break;
54+
case 'I':
55+
pflags |= UCL_PARSER_KEY_LOWERCASE;
56+
break;
6257
default:
6358
fprintf(stderr, "Error: Unexpected option: %i\n", ch);
6459
usage();
@@ -68,8 +63,14 @@ output_main(int argc, char *argv[])
6863
argc -= optind;
6964
argv += optind;
7065

71-
if (filename == NULL) {
66+
/* Initialize parser */
67+
parser = ucl_parser_new(UCLCMD_PARSER_FLAGS | pflags);
68+
69+
if (filename == NULL || strcmp(filename, "-") == 0) {
70+
/* Input from STDIN */
7271
root_obj = parse_input(parser, stdin);
72+
} else {
73+
root_obj = parse_file(parser, filename);
7374
}
7475

7576
ucl_obj_dump(root_obj, 0);

0 commit comments

Comments
 (0)