You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.5 KiB
63 lines
1.5 KiB
#include <string.h> |
|
#include "jansson_private.h" |
|
|
|
void jsonp_error_init(json_error_t *error, const char *source) |
|
{ |
|
if(error) |
|
{ |
|
error->text[0] = '\0'; |
|
error->line = -1; |
|
error->column = -1; |
|
error->position = 0; |
|
if(source) |
|
jsonp_error_set_source(error, source); |
|
else |
|
error->source[0] = '\0'; |
|
} |
|
} |
|
|
|
void jsonp_error_set_source(json_error_t *error, const char *source) |
|
{ |
|
size_t length; |
|
|
|
if(!error || !source) |
|
return; |
|
|
|
length = strlen(source); |
|
if(length < JSON_ERROR_SOURCE_LENGTH) |
|
strcpy(error->source, source); |
|
else { |
|
size_t extra = length - JSON_ERROR_SOURCE_LENGTH + 4; |
|
strcpy(error->source, "..."); |
|
strcpy(error->source + 3, source + extra); |
|
} |
|
} |
|
|
|
void jsonp_error_set(json_error_t *error, int line, int column, |
|
size_t position, const char *msg, ...) |
|
{ |
|
va_list ap; |
|
|
|
va_start(ap, msg); |
|
jsonp_error_vset(error, line, column, position, msg, ap); |
|
va_end(ap); |
|
} |
|
|
|
void jsonp_error_vset(json_error_t *error, int line, int column, |
|
size_t position, const char *msg, va_list ap) |
|
{ |
|
if(!error) |
|
return; |
|
|
|
if(error->text[0] != '\0') { |
|
/* error already set */ |
|
return; |
|
} |
|
|
|
error->line = line; |
|
error->column = column; |
|
error->position = position; |
|
|
|
vsnprintf(error->text, JSON_ERROR_TEXT_LENGTH, msg, ap); |
|
error->text[JSON_ERROR_TEXT_LENGTH - 1] = '\0'; |
|
}
|
|
|