diff options
author | Michael Clark <michael@metaparadigm.com> | 2007-03-13 08:26:20 +0000 |
---|---|---|
committer | Michael Clark <michael@metaparadigm.com> | 2007-03-13 08:26:20 +0000 |
commit | 4504df71178fe7a0eb8e7c37fa548b7c853a800f (patch) | |
tree | b5c804143276475f469429ad2f7e6c7de9584743 /json_util.c | |
parent | f0d08887b857fce1fe95a68d29eb7a07cd527d7c (diff) | |
download | json-c-4504df71178fe7a0eb8e7c37fa548b7c853a800f.tar.gz |
* printbuf.c - C. Watford (christopher dot watford at gmail dot com)
Added a Win32/Win64 compliant implementation of vasprintf
* debug.c - C. Watford (christopher dot watford at gmail dot com)
Removed usage of vsyslog on Win32/Win64 systems, needs to be handled
by a configure script
* json_object.c - C. Watford (christopher dot watford at gmail dot com)
Added scope operator to wrap usage of json_object_object_foreach, this
needs to be rethought to be more ANSI C friendly
* json_object.h - C. Watford (christopher dot watford at gmail dot com)
Added Microsoft C friendly version of json_object_object_foreach
* json_tokener.c - C. Watford (christopher dot watford at gmail dot com)
Added a Win32/Win64 compliant implementation of strndup
* json_util.c - C. Watford (christopher dot watford at gmail dot com)
Added cast and mask to suffice size_t v. unsigned int conversion
correctness
* json_tokener.c - sign reversal issue on error info for nested object parse
spotted by Johan Bj�rklund (johbjo09 at kth.se)
* json_object.c - escape " in json_escape_str
* Change to automake and libtool to build shared and static library
Michael Clark <michael@metaparadigm.com>
git-svn-id: http://svn.metaparadigm.com/svn/json-c/trunk@4 327403b1-1117-474d-bef2-5cb71233fd97
Diffstat (limited to 'json_util.c')
-rw-r--r-- | json_util.c | 56 |
1 files changed, 50 insertions, 6 deletions
diff --git a/json_util.c b/json_util.c index 483644e..07abd89 100644 --- a/json_util.c +++ b/json_util.c @@ -1,11 +1,50 @@ +/* + * $Id: json_util.c,v 1.2 2005/06/14 22:41:51 mclark Exp $ + * + * Copyright Metaparadigm Pte. Ltd. 2004. + * Michael Clark <michael@metaparadigm.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public (LGPL) + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details: http://www.gnu.org/ + * + */ + +#include "config.h" + #include <stdio.h> #include <stdlib.h> +#include <limits.h> #include <string.h> #include <errno.h> -#include <unistd.h> + +#if HAVE_SYS_TYPES_H #include <sys/types.h> +#endif /* HAVE_SYS_TYPES_H */ + +#if HAVE_SYS_STAT_H #include <sys/stat.h> +#endif /* HAVE_SYS_STAT_H */ + +#if HAVE_FCNTL_H #include <fcntl.h> +#endif /* HAVE_FCNTL_H */ + +#if HAVE_UNISTD_H +# include <unistd.h> +#endif /* HAVE_UNISTD_H */ + +#ifdef WIN32 +# define WIN32_LEAN_AND_MEAN +# include <windows.h> +# include <io.h> +#endif /* defined(WIN32) */ #include "bits.h" #include "debug.h" @@ -14,7 +53,6 @@ #include "json_tokener.h" #include "json_util.h" - struct json_object* json_object_from_file(char *filename) { struct printbuf *pb; @@ -49,7 +87,8 @@ struct json_object* json_object_from_file(char *filename) int json_object_to_file(char *filename, struct json_object *obj) { char *json_str; - int fd, ret, wpos, wsize; + int fd, ret; + unsigned int wpos, wsize; if(!obj) { mc_error("json_object_to_file: object is null\n"); @@ -61,8 +100,11 @@ int json_object_to_file(char *filename, struct json_object *obj) filename, strerror(errno)); return -1; } - if(!(json_str = json_object_to_json_string(obj))) return -1; - wsize = strlen(json_str); + + if(!(json_str = json_object_to_json_string(obj))) { return -1; } + + + wsize = (unsigned int)(strlen(json_str) & UINT_MAX); /* CAW: probably unnecessary, but the most 64bit safe */ wpos = 0; while(wpos < wsize) { if((ret = write(fd, json_str + wpos, wsize-wpos)) < 0) { @@ -71,7 +113,9 @@ int json_object_to_file(char *filename, struct json_object *obj) filename, strerror(errno)); return -1; } - wpos += ret; + + /* because of the above check for ret < 0, we can safely cast and add */ + wpos += (unsigned int)ret; } close(fd); |