diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/.clang-format | 45 | ||||
| -rw-r--r-- | lib/.clang-tidy | 19 | ||||
| -rw-r--r-- | lib/compile_flags.txt | 8 | ||||
| -rw-r--r-- | lib/config.mk | 4 | ||||
| -rw-r--r-- | lib/makefile | 20 | ||||
| -rw-r--r-- | lib/src/csv.c | 74 |
6 files changed, 133 insertions, 37 deletions
diff --git a/lib/.clang-format b/lib/.clang-format new file mode 100644 index 0000000..b32bad6 --- /dev/null +++ b/lib/.clang-format | |||
| @@ -0,0 +1,45 @@ | |||
| 1 | --- | ||
| 2 | AccessModifierOffset: -4 | ||
| 3 | AlignConsecutiveAssignments: 'true' | ||
| 4 | AlignConsecutiveDeclarations: 'true' | ||
| 5 | AlignEscapedNewlines: Left | ||
| 6 | AlignTrailingComments: 'true' | ||
| 7 | AlwaysBreakAfterReturnType: TopLevelDefinitions | ||
| 8 | BreakBeforeBraces: Stroustrup | ||
| 9 | BreakConstructorInitializers: BeforeComma | ||
| 10 | BreakInheritanceList: BeforeComma | ||
| 11 | ColumnLimit: '0' | ||
| 12 | CompactNamespaces: 'false' | ||
| 13 | Cpp11BracedListStyle: 'false' | ||
| 14 | FixNamespaceComments: 'true' | ||
| 15 | IncludeBlocks: Regroup | ||
| 16 | IncludeCategories: | ||
| 17 | - Regex: '^.*(precomp|pch|stdafx)' | ||
| 18 | Priority: -1 | ||
| 19 | - Regex: '^<.*>' | ||
| 20 | Priority: 1 | ||
| 21 | - Regex: '^".*"' | ||
| 22 | Priority: 2 | ||
| 23 | - Regex: '.*' | ||
| 24 | Priority: 3 | ||
| 25 | IndentCaseLabels: 'false' | ||
| 26 | IndentPPDirectives: AfterHash | ||
| 27 | IndentWidth: '4' | ||
| 28 | IndentWrappedFunctionNames: 'false' | ||
| 29 | KeepEmptyLinesAtTheStartOfBlocks: 'false' | ||
| 30 | PointerAlignment: Right | ||
| 31 | SortIncludes: 'true' | ||
| 32 | SpaceAfterCStyleCast: 'true' | ||
| 33 | SpaceAfterTemplateKeyword: 'false' | ||
| 34 | SpaceBeforeAssignmentOperators: 'true' | ||
| 35 | SpaceBeforeParens: ControlStatements | ||
| 36 | SpaceBeforeRangeBasedForLoopColon: 'false' | ||
| 37 | SpaceInEmptyParentheses: 'false' | ||
| 38 | SpacesInAngles: 'false' | ||
| 39 | SpacesInCStyleCastParentheses: 'false' | ||
| 40 | SpacesInConditionalStatement: 'true' | ||
| 41 | SpacesInParentheses: 'false' | ||
| 42 | Standard: Auto | ||
| 43 | TabWidth: '4' | ||
| 44 | UseTab: ForIndentation | ||
| 45 | ... | ||
diff --git a/lib/.clang-tidy b/lib/.clang-tidy new file mode 100644 index 0000000..0bceb5b --- /dev/null +++ b/lib/.clang-tidy | |||
| @@ -0,0 +1,19 @@ | |||
| 1 | --- | ||
| 2 | Checks: "*, | ||
| 3 | -abseil-*, | ||
| 4 | -altera-*, | ||
| 5 | -android-*, | ||
| 6 | -fuchsia-*, | ||
| 7 | -google-*, | ||
| 8 | -llvm*, | ||
| 9 | -modernize-use-trailing-return-type, | ||
| 10 | -zircon-*, | ||
| 11 | -readability-else-after-return, | ||
| 12 | -readability-static-accessed-through-instance, | ||
| 13 | -readability-avoid-const-params-in-decls, | ||
| 14 | -cppcoreguidelines-non-private-member-variables-in-classes, | ||
| 15 | -misc-non-private-member-variables-in-classes, | ||
| 16 | " | ||
| 17 | WarningsAsErrors: '' | ||
| 18 | HeaderFilterRegex: '' | ||
| 19 | FormatStyle: none | ||
diff --git a/lib/compile_flags.txt b/lib/compile_flags.txt new file mode 100644 index 0000000..8b85c07 --- /dev/null +++ b/lib/compile_flags.txt | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | -Wall | ||
| 2 | -Wextra | ||
| 3 | -Wsign-compare | ||
| 4 | -Wsign-conversion | ||
| 5 | -pedantic | ||
| 6 | -std=c99 | ||
| 7 | -O2 | ||
| 8 | -Iinclude | ||
diff --git a/lib/config.mk b/lib/config.mk new file mode 100644 index 0000000..6b4ff86 --- /dev/null +++ b/lib/config.mk | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | BUILD_DIR=../build | ||
| 2 | ARFLAGS=rcs | ||
| 3 | CFLAGS=-Wall -Wextra -Wsign-compare -Wsign-conversion -pedantic -std=c99 -O2 -Iinclude -DNDEBUG | ||
| 4 | |||
diff --git a/lib/makefile b/lib/makefile index e69de29..5c832ba 100644 --- a/lib/makefile +++ b/lib/makefile | |||
| @@ -0,0 +1,20 @@ | |||
| 1 | include config.mk | ||
| 2 | |||
| 3 | LIBRARY=$(BUILD_DIR)/libcsv.a | ||
| 4 | OBJS=$(BUILD_DIR)/csv.o | ||
| 5 | |||
| 6 | $(LIBRARY): $(OBJS) | ||
| 7 | ar $(ARFLAGS) $@ $(OBJS) | ||
| 8 | |||
| 9 | $(BUILD_DIR)/%.o: src/%.c | $(BUILD_DIR) | ||
| 10 | cc $(CFLAGS) -c $< -o $@ | ||
| 11 | |||
| 12 | $(BUILD_DIR): | ||
| 13 | mkdir -p $@ | ||
| 14 | |||
| 15 | compile_flags.txt: | ||
| 16 | echo "$(CFLAGS)" | tr ' ' '\n' > $@ | ||
| 17 | |||
| 18 | .PHONY: clean | ||
| 19 | clean: | ||
| 20 | rm -f $(LIBRARY) $(OBJS) | ||
diff --git a/lib/src/csv.c b/lib/src/csv.c index e9c7464..ba78dbd 100644 --- a/lib/src/csv.c +++ b/lib/src/csv.c | |||
| @@ -305,35 +305,35 @@ csv_read(csv_t *csv, FILE *in) | |||
| 305 | csv_field_reset(&csv->csv_field); | 305 | csv_field_reset(&csv->csv_field); |
| 306 | 306 | ||
| 307 | for ( int state = STATE_START_FIELD;; ) { | 307 | for ( int state = STATE_START_FIELD;; ) { |
| 308 | int ch; | 308 | int chr; |
| 309 | 309 | ||
| 310 | switch ( state ) { | 310 | switch ( state ) { |
| 311 | case STATE_START_FIELD: | 311 | case STATE_START_FIELD: |
| 312 | csv_field_append(&csv->csv_field, csv->csv_string.pos, csv->csv_options); | 312 | csv_field_append(&csv->csv_field, csv->csv_string.pos, csv->csv_options); |
| 313 | 313 | ||
| 314 | ch = getc(in); | 314 | chr = getc(in); |
| 315 | if ( ch == EOF ) { | 315 | if ( chr == EOF ) { |
| 316 | state = STATE_END_FILE; | 316 | state = STATE_END_FILE; |
| 317 | } | 317 | } |
| 318 | else if ( ch == '\r' ) { // test for CR.. | 318 | else if ( chr == '\r' ) { // test for CR.. |
| 319 | ch = getc(in); | 319 | chr = getc(in); |
| 320 | if ( ch != '\n' ) { // ..LF | 320 | if ( chr != '\n' ) { // ..LF |
| 321 | (void) ungetc(ch, in); | 321 | (void) ungetc(chr, in); |
| 322 | } | 322 | } |
| 323 | state = STATE_END_LINE; | 323 | state = STATE_END_LINE; |
| 324 | } | 324 | } |
| 325 | else if ( ch == '\n' ) { | 325 | else if ( chr == '\n' ) { |
| 326 | state = STATE_END_LINE; | 326 | state = STATE_END_LINE; |
| 327 | } | 327 | } |
| 328 | else if ( ch == SEP ) { | 328 | else if ( chr == SEP ) { |
| 329 | state = STATE_END_FIELD; | 329 | state = STATE_END_FIELD; |
| 330 | } | 330 | } |
| 331 | else if ( ch == DELIM ) { | 331 | else if ( chr == DELIM ) { |
| 332 | state = STATE_QUOTED_FIELD; | 332 | state = STATE_QUOTED_FIELD; |
| 333 | } | 333 | } |
| 334 | else { | 334 | else { |
| 335 | if ( ch != '\0' ) { | 335 | if ( chr != '\0' ) { |
| 336 | csv_string_append(&csv->csv_string, ch, csv->csv_options); | 336 | csv_string_append(&csv->csv_string, chr, csv->csv_options); |
| 337 | } | 337 | } |
| 338 | state = STATE_SIMPLE_FIELD; | 338 | state = STATE_SIMPLE_FIELD; |
| 339 | } | 339 | } |
| @@ -341,39 +341,39 @@ csv_read(csv_t *csv, FILE *in) | |||
| 341 | 341 | ||
| 342 | case STATE_QUOTED_FIELD: | 342 | case STATE_QUOTED_FIELD: |
| 343 | do { | 343 | do { |
| 344 | ch = getc(in); | 344 | chr = getc(in); |
| 345 | if ( ch == EOF ) { | 345 | if ( chr == EOF ) { |
| 346 | state = STATE_END_FILE; | 346 | state = STATE_END_FILE; |
| 347 | } | 347 | } |
| 348 | else if ( ch == DELIM ) { | 348 | else if ( chr == DELIM ) { |
| 349 | ch = getc(in); | 349 | chr = getc(in); |
| 350 | if ( ch == EOF ) { | 350 | if ( chr == EOF ) { |
| 351 | state = STATE_END_FILE; | 351 | state = STATE_END_FILE; |
| 352 | } | 352 | } |
| 353 | else if ( ch == DELIM ) { | 353 | else if ( chr == DELIM ) { |
| 354 | csv_string_append(&csv->csv_string, DELIM, csv->csv_options); | 354 | csv_string_append(&csv->csv_string, DELIM, csv->csv_options); |
| 355 | } | 355 | } |
| 356 | else if ( ch == SEP ) { | 356 | else if ( chr == SEP ) { |
| 357 | state = STATE_END_FIELD; | 357 | state = STATE_END_FIELD; |
| 358 | } | 358 | } |
| 359 | else if ( ch == '\r' ) { | 359 | else if ( chr == '\r' ) { |
| 360 | ch = getc(in); | 360 | chr = getc(in); |
| 361 | if ( ch != '\n' ) { | 361 | if ( chr != '\n' ) { |
| 362 | (void) ungetc(ch, in); | 362 | (void) ungetc(chr, in); |
| 363 | } | 363 | } |
| 364 | state = STATE_END_LINE; | 364 | state = STATE_END_LINE; |
| 365 | } | 365 | } |
| 366 | else if ( ch == '\n' ) { | 366 | else if ( chr == '\n' ) { |
| 367 | state = STATE_END_LINE; | 367 | state = STATE_END_LINE; |
| 368 | } | 368 | } |
| 369 | else { | 369 | else { |
| 370 | csv_string_append(&csv->csv_string, DELIM, csv->csv_options); | 370 | csv_string_append(&csv->csv_string, DELIM, csv->csv_options); |
| 371 | (void) ungetc(ch, in); // we have read too far... Put the character back! | 371 | (void) ungetc(chr, in); // we have read too far... Put the character back! |
| 372 | } | 372 | } |
| 373 | } | 373 | } |
| 374 | else { | 374 | else { |
| 375 | if ( ch != '\0' ) { | 375 | if ( chr != '\0' ) { |
| 376 | csv_string_append(&csv->csv_string, ch, csv->csv_options); | 376 | csv_string_append(&csv->csv_string, chr, csv->csv_options); |
| 377 | } | 377 | } |
| 378 | } | 378 | } |
| 379 | } while ( state == STATE_QUOTED_FIELD ); | 379 | } while ( state == STATE_QUOTED_FIELD ); |
| @@ -381,26 +381,26 @@ csv_read(csv_t *csv, FILE *in) | |||
| 381 | 381 | ||
| 382 | case STATE_SIMPLE_FIELD: | 382 | case STATE_SIMPLE_FIELD: |
| 383 | do { | 383 | do { |
| 384 | ch = getc(in); | 384 | chr = getc(in); |
| 385 | if ( ch == EOF ) { | 385 | if ( chr == EOF ) { |
| 386 | state = STATE_END_FILE; | 386 | state = STATE_END_FILE; |
| 387 | } | 387 | } |
| 388 | else if ( ch == SEP ) { | 388 | else if ( chr == SEP ) { |
| 389 | state = STATE_END_FIELD; | 389 | state = STATE_END_FIELD; |
| 390 | } | 390 | } |
| 391 | else if ( ch == '\r' ) { | 391 | else if ( chr == '\r' ) { |
| 392 | ch = getc(in); | 392 | chr = getc(in); |
| 393 | if ( ch != '\n' ) { | 393 | if ( chr != '\n' ) { |
| 394 | (void) ungetc(ch, in); | 394 | (void) ungetc(chr, in); |
| 395 | } | 395 | } |
| 396 | state = STATE_END_LINE; | 396 | state = STATE_END_LINE; |
| 397 | } | 397 | } |
| 398 | else if ( ch == '\n' ) { | 398 | else if ( chr == '\n' ) { |
| 399 | state = STATE_END_LINE; | 399 | state = STATE_END_LINE; |
| 400 | } | 400 | } |
| 401 | else { | 401 | else { |
| 402 | if ( ch != '\0' ) { | 402 | if ( chr != '\0' ) { |
| 403 | csv_string_append(&csv->csv_string, ch, csv->csv_options); | 403 | csv_string_append(&csv->csv_string, chr, csv->csv_options); |
| 404 | } | 404 | } |
| 405 | } | 405 | } |
| 406 | } while ( state == STATE_SIMPLE_FIELD ); | 406 | } while ( state == STATE_SIMPLE_FIELD ); |
