annotate extern/jansson/src/error.c @ 11:fe95a8db2970

Common: add libjs, #463 While here, change includes to add full destination when building only.
author David Demelier <markand@malikania.fr>
date Fri, 01 Apr 2016 13:43:30 +0200
parents 8991989c4708
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 #include <string.h>
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 #include "jansson_private.h"
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
3
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 void jsonp_error_init(json_error_t *error, const char *source)
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 {
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 if(error)
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 {
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 error->text[0] = '\0';
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 error->line = -1;
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 error->column = -1;
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 error->position = 0;
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 if(source)
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 jsonp_error_set_source(error, source);
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 else
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 error->source[0] = '\0';
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 }
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 }
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 void jsonp_error_set_source(json_error_t *error, const char *source)
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 {
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 size_t length;
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
22
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 if(!error || !source)
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 return;
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
25
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 length = strlen(source);
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 if(length < JSON_ERROR_SOURCE_LENGTH)
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 strcpy(error->source, source);
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 else {
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 size_t extra = length - JSON_ERROR_SOURCE_LENGTH + 4;
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 strcpy(error->source, "...");
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 strcpy(error->source + 3, source + extra);
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 }
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 }
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
35
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 void jsonp_error_set(json_error_t *error, int line, int column,
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 size_t position, const char *msg, ...)
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 {
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 va_list ap;
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
40
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 va_start(ap, msg);
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 jsonp_error_vset(error, line, column, position, msg, ap);
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 va_end(ap);
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 }
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
45
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 void jsonp_error_vset(json_error_t *error, int line, int column,
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 size_t position, const char *msg, va_list ap)
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 {
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 if(!error)
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 return;
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
51
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 if(error->text[0] != '\0') {
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 /* error already set */
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 return;
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 }
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
56
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 error->line = line;
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 error->column = column;
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 error->position = position;
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
60
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 vsnprintf(error->text, JSON_ERROR_TEXT_LENGTH, msg, ap);
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 error->text[JSON_ERROR_TEXT_LENGTH - 1] = '\0';
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 }