1/* $NetBSD$ */ 2 3/* 4 * Copyright (c) 2010 Kungliga Tekniska H��gskolan 5 * (Royal Institute of Technology, Stockholm, Sweden). 6 * All rights reserved. 7 * 8 * Portions Copyright (c) 2010 Apple Inc. All rights reserved. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 14 * 1. Redistributions of source code must retain the above copyright 15 * notice, this list of conditions and the following disclaimer. 16 * 17 * 2. Redistributions in binary form must reproduce the above copyright 18 * notice, this list of conditions and the following disclaimer in the 19 * documentation and/or other materials provided with the distribution. 20 * 21 * 3. Neither the name of the Institute nor the names of its contributors 22 * may be used to endorse or promote products derived from this software 23 * without specific prior written permission. 24 * 25 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 26 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 28 * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 31 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 32 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 33 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 34 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 35 * SUCH DAMAGE. 36 */ 37 38#include "baselocl.h" 39#include <string.h> 40 41static void 42string_dealloc(void *ptr) 43{ 44} 45 46static int 47string_cmp(void *a, void *b) 48{ 49 return strcmp(a, b); 50} 51 52static unsigned long 53string_hash(void *ptr) 54{ 55 const char *s = ptr; 56 unsigned long n; 57 58 for (n = 0; *s; ++s) 59 n += *s; 60 return n; 61} 62 63struct heim_type_data _heim_string_object = { 64 HEIM_TID_STRING, 65 "string-object", 66 NULL, 67 string_dealloc, 68 NULL, 69 string_cmp, 70 string_hash 71}; 72 73/** 74 * Create a string object 75 * 76 * @param string the string to create, must be an utf8 string 77 * 78 * @return string object 79 */ 80 81heim_string_t 82heim_string_create(const char *string) 83{ 84 size_t len = strlen(string); 85 heim_string_t s; 86 87 s = _heim_alloc_object(&_heim_string_object, len + 1); 88 if (s) 89 memcpy(s, string, len + 1); 90 return s; 91} 92 93/** 94 * Return the type ID of string objects 95 * 96 * @return type id of string objects 97 */ 98 99heim_tid_t 100heim_string_get_type_id(void) 101{ 102 return HEIM_TID_STRING; 103} 104 105/** 106 * Get the string value of the content. 107 * 108 * @param string the string object to get the value from 109 * 110 * @return a utf8 string 111 */ 112 113const char * 114heim_string_get_utf8(heim_string_t string) 115{ 116 return (const char *)string; 117} 118