1 /* $NetBSD: string.c,v 1.1.1.1 2011/04/13 18:14:32 elric Exp $ */ 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 41 static void 42 string_dealloc(void *ptr) 43 { 44 } 45 46 static int 47 string_cmp(void *a, void *b) 48 { 49 return strcmp(a, b); 50 } 51 52 static unsigned long 53 string_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 63 struct 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 81 heim_string_t 82 heim_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 99 heim_tid_t 100 heim_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 113 const char * 114 heim_string_get_utf8(heim_string_t string) 115 { 116 return (const char *)string; 117 } 118