X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=json.c;h=817fc83a3de060eb954575138a7c2c50471982ea;hp=396075002db017309f8768b0a1c75e0967aaeeba;hb=353577ad5733b78b71d93c9bdbaae0b062d32331;hpb=6ce2bf68f53fec4302121763e588c33c7cd86a9c diff --git a/json.c b/json.c index 39607500..817fc83a 100644 --- a/json.c +++ b/json.c @@ -1,5 +1,6 @@ /* notmuch - Not much of an email program, (just index and search) * + * Copyright © 2009 Dave Gamble * Copyright © 2009 Scott Robinson * * This program is free software: you can redistribute it and/or modify @@ -15,41 +16,68 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see http://www.gnu.org/licenses/ . * - * Authors: Scott Robinson + * Authors: Dave Gamble + * Scott Robinson * */ #include "notmuch-client.h" -/* - * json_quote_str derived from cJSON's print_string_ptr, +/* This function was derived from the print_string_ptr function of + * cJSON (http://cjson.sourceforge.net/) and is used by permission of + * the following license: + * * Copyright (c) 2009 Dave Gamble + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. */ char * -json_quote_str(const void *ctx, const char *str) +json_quote_chararray(const void *ctx, const char *str, const size_t len) { const char *ptr; char *ptr2; char *out; - int len = 0; - - if (!str) - return NULL; + size_t loop; + size_t required; - for (ptr = str; *ptr; len++, ptr++) { - if (*ptr < 32 || *ptr == '\"' || *ptr == '\\') - len++; + for (loop = 0, required = 0, ptr = str; + loop < len; + loop++, required++, ptr++) { + if ((unsigned char)(*ptr) < 32 || *ptr == '\"' || *ptr == '\\') + required++; } - out = talloc_array (ctx, char, len + 3); + /* + * + 3 for: + * - leading quotation mark, + * - trailing quotation mark, + * - trailing NULL. + */ + out = talloc_array (ctx, char, required + 3); ptr = str; ptr2 = out; *ptr2++ = '\"'; - while (*ptr) { - if (*ptr > 31 && *ptr != '\"' && *ptr != '\\') { + for (loop = 0; loop < len; loop++) { + if ((unsigned char)(*ptr) > 31 && *ptr != '\"' && *ptr != '\\') { *ptr2++ = *ptr++; } else { *ptr2++ = '\\'; @@ -70,3 +98,12 @@ json_quote_str(const void *ctx, const char *str) return out; } + +char * +json_quote_str(const void *ctx, const char *str) +{ + if (str == NULL) + str = ""; + + return (json_quote_chararray (ctx, str, strlen (str))); +}