X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=src%2Ferror.c;h=074a68e098e8bacb58585dd50404695020e9e910;hb=58f9d655358bc0c68bfadbc2946b964c2ac774b7;hp=cd807562e817159c399ef2455472ce373062b00a;hpb=7f3018a4fb547a10ce250db91ec0d41b0cc57bf2;p=jansson.git diff --git a/src/error.c b/src/error.c index cd80756..074a68e 100644 --- a/src/error.c +++ b/src/error.c @@ -8,24 +8,41 @@ void jsonp_error_init(json_error_t *error, const char *source) 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) +{ + if(!error || !source) + return; - strncpy(error->source, source, JSON_ERROR_SOURCE_LENGTH); - error->source[JSON_ERROR_SOURCE_LENGTH - 1] = '\0'; + size_t 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, - const char *msg, ...) + size_t position, const char *msg, ...) { va_list ap; va_start(ap, msg); - jsonp_error_vset(error, line, column, msg, ap); + jsonp_error_vset(error, line, column, position, msg, ap); va_end(ap); } void jsonp_error_vset(json_error_t *error, int line, int column, - const char *msg, va_list ap) + size_t position, const char *msg, va_list ap) { if(!error) return; @@ -37,6 +54,7 @@ void jsonp_error_vset(json_error_t *error, int line, int column, error->line = line; error->column = column; + error->position = position; vsnprintf(error->text, JSON_ERROR_TEXT_LENGTH, msg, ap); }