1e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/*************************************************************************** 2e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * _ _ ____ _ 3e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * Project ___| | | | _ \| | 4e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * / __| | | | |_) | | 5e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * | (__| |_| | _ <| |___ 6e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * \___|\___/|_| \_\_____| 7e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * 88f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. 9e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * 10e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * This software is licensed as described in the file COPYING, which 11e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * you should have received as part of this distribution. The terms 128f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo * are also available at https://curl.haxx.se/docs/copyright.html. 13e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * 14e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * You may opt to use, copy, modify, merge, publish, distribute and/or sell 15e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * copies of the Software, and permit persons to whom the Software is 16e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * furnished to do so, under the terms of the COPYING file. 17e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * 18e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 19e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * KIND, either express or implied. 20e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * 21e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET ***************************************************************************/ 22e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#include "curlcheck.h" 23e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 24e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define ENABLE_CURLX_PRINTF 25e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#include "curlx.h" 26e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 27e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#include "hash.h" 28e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 29e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#include "memdebug.h" /* LAST include file */ 30e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 318f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymostatic struct curl_hash hash_static; 328f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo 338f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymostatic void mydtor(void *p) 34e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET{ 35cee0338be80bb81b15101686d6f60864455f1e6eElliott Hughes int *ptr = (int *)p; 368f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo free(ptr); 37e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} 38e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 398f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymostatic CURLcode unit_setup(void) 40e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET{ 418f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo return Curl_hash_init(&hash_static, 7, Curl_hash_str, 428f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo Curl_str_key_compare, mydtor); 43e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} 44e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 458f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymostatic void unit_stop(void) 46e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET{ 478f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo Curl_hash_destroy(&hash_static); 48e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} 49e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 50e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNETUNITTEST_START 51e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET int *value; 52e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET int *value2; 538f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo int *nodep; 54e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET size_t klen = sizeof(int); 55e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 56e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET int key = 20; 57e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET int key2 = 25; 58e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 59e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 60e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET value = malloc(sizeof(int)); 618f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo abort_unless(value != NULL, "Out of memory"); 62e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET *value = 199; 638f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo nodep = Curl_hash_add(&hash_static, &key, klen, value); 648f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo if(!nodep) 658f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo free(value); 668f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo abort_unless(nodep, "insertion into hash failed"); 67e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET Curl_hash_clean(&hash_static); 68e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 69e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET /* Attempt to add another key/value pair */ 708f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo value2 = malloc(sizeof(int)); 718f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo abort_unless(value2 != NULL, "Out of memory"); 728f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo *value2 = 204; 738f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo nodep = Curl_hash_add(&hash_static, &key2, klen, value2); 748f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo if(!nodep) 758f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo free(value2); 768f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo abort_unless(nodep, "insertion into hash failed"); 77e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 78e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNETUNITTEST_STOP 79