Line data Source code
1 : #include <passgen/error.h> 2 : #include <stdio.h> 3 : #include <string.h> 4 : 5 10619 : void passgen_error_init_raw(passgen_error *error, const char *message) { 6 10619 : passgen_array_init(&error->causes, 0); 7 10619 : memset(&error->source, 0, sizeof(passgen_error_source)); 8 10619 : memset(&error->offset, 0, sizeof(passgen_error_offset)); 9 10619 : memset(&error->end, 0, sizeof(passgen_error_offset)); 10 10619 : error->message = message; 11 10619 : } 12 : 13 0 : void passgen_error_free(passgen_error *error) { 14 0 : passgen_array_free(&error->causes); 15 0 : memset(error, 0, sizeof(passgen_error)); 16 0 : } 17 : 18 0 : void passgen_error_print(passgen_error *error, const char *pattern) { 19 0 : fprintf( 20 : stderr, 21 : "\033[1;31merror\033[0m parsing pattern: %s\n", 22 : error->message); 23 0 : if(error->source.file) { 24 0 : fprintf(stderr, "location %s:%zu\n", error->source.file, error->source.line); 25 : } 26 0 : fprintf(stderr, "\033[1;33mpattern\033[0m: %s\n", pattern); 27 0 : fprintf(stderr, " "); 28 0 : for(size_t i = 1; i < error->offset.byte; i++) { 29 0 : fprintf(stderr, " "); 30 : } 31 0 : fprintf(stderr, "\033[1;31m^\033[0m\n"); 32 0 : } 33 : 34 0 : void passgen_error_cause_add(passgen_error *error, const passgen_error *cause) { 35 0 : passgen_array_push(&error->causes, (void *) cause); 36 0 : } 37 : 38 10619 : void passgen_error_offset_set(passgen_error *error, size_t codepoint, size_t byte) { 39 10619 : error->offset.codepoint = codepoint; 40 10619 : error->offset.byte = byte; 41 10619 : } 42 : 43 10619 : void passgen_error_source_set(passgen_error *error, const char *file, size_t line) { 44 10619 : error->source.file = file; 45 10619 : error->source.line = line; 46 10619 : }