X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=src%2Fpack_unpack.c;h=e785357f77bdcb0fbc6f5be29dd44ae0643fd2da;hb=908c62f3278b682d879e8ffbdb71bcec60846977;hp=f91d79c25b7b7e6f27ce2033c0658c0a5eff9ebc;hpb=ac96ac13d491f87f5aa8747e208b366c81354a0b;p=jansson.git diff --git a/src/pack_unpack.c b/src/pack_unpack.c index f91d79c..e785357 100644 --- a/src/pack_unpack.c +++ b/src/pack_unpack.c @@ -166,9 +166,12 @@ static json_t *pack(scanner_t *s, va_list *ap) case 'b': /* boolean */ return va_arg(*ap, int) ? json_true() : json_false(); - case 'i': /* integer */ + case 'i': /* integer from int */ return json_integer(va_arg(*ap, int)); + case 'I': /* integer from json_int_t */ + return json_integer(va_arg(*ap, json_int_t)); + case 'f': /* real */ return json_real(va_arg(*ap, double)); @@ -368,6 +371,17 @@ static int unpack(scanner_t *s, json_t *root, va_list *ap) return 0; + case 'I': + if(!json_is_integer(root)) { + set_error(s, "Expected integer, got %s", type_name(root)); + return -1; + } + + if(!(s->flags & JSON_VALIDATE_ONLY)) + *va_arg(*ap, json_int_t*) = json_integer_value(root); + + return 0; + case 'b': if(!json_is_boolean(root)) { set_error(s, "Expected true or false, got %s", type_name(root)); @@ -380,12 +394,24 @@ static int unpack(scanner_t *s, json_t *root, va_list *ap) return 0; case 'f': - if(!json_is_number(root)) { + if(!json_is_real(root)) { set_error(s, "Expected real, got %s", type_name(root)); return -1; } if(!(s->flags & JSON_VALIDATE_ONLY)) + *va_arg(*ap, double*) = json_real_value(root); + + return 0; + + case 'F': + if(!json_is_number(root)) { + set_error(s, "Expected real or integer, got %s", + type_name(root)); + return -1; + } + + if(!(s->flags & JSON_VALIDATE_ONLY)) *va_arg(*ap, double*) = json_number_value(root); return 0;