X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=json.c;h=f90b0fa245324204347070d870ac22257e0d6f95;hp=396075002db017309f8768b0a1c75e0967aaeeba;hb=a48f3687785b2c138b2c47848bd05512fc893a0b;hpb=6ce2bf68f53fec4302121763e588c33c7cd86a9c diff --git a/json.c b/json.c index 39607500..f90b0fa2 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,40 +16,70 @@ * 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; + size_t loop; + size_t required; - if (!str) - return NULL; + if (len == 0) + return (char *)"\"\""; - for (ptr = str; *ptr; len++, ptr++) { + for (loop = 0, required = 0, ptr = str; + loop < len; + loop++, required++, ptr++) { if (*ptr < 32 || *ptr == '\"' || *ptr == '\\') - len++; + 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) { + for (loop = 0; loop < len; loop++) { if (*ptr > 31 && *ptr != '\"' && *ptr != '\\') { *ptr2++ = *ptr++; } else { @@ -70,3 +101,9 @@ json_quote_str(const void *ctx, const char *str) return out; } + +char * +json_quote_str(const void *ctx, const char *str) +{ + return (json_quote_chararray (ctx, str, strlen (str))); +}