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