1*61d06d6bSBaptiste Daroussin #include "config.h" 2*61d06d6bSBaptiste Daroussin 3*61d06d6bSBaptiste Daroussin #if HAVE_STRINGLIST 4*61d06d6bSBaptiste Daroussin 5*61d06d6bSBaptiste Daroussin int dummy; 6*61d06d6bSBaptiste Daroussin 7*61d06d6bSBaptiste Daroussin #else 8*61d06d6bSBaptiste Daroussin 9*61d06d6bSBaptiste Daroussin /* $Id: compat_stringlist.c,v 1.6 2015/11/07 14:22:29 schwarze Exp $ */ 10*61d06d6bSBaptiste Daroussin /* 11*61d06d6bSBaptiste Daroussin * Copyright (c) 1994 Christos Zoulas <christos@netbsd.org> 12*61d06d6bSBaptiste Daroussin * All rights reserved. 13*61d06d6bSBaptiste Daroussin * 14*61d06d6bSBaptiste Daroussin * Redistribution and use in source and binary forms, with or without 15*61d06d6bSBaptiste Daroussin * modification, are permitted provided that the following conditions 16*61d06d6bSBaptiste Daroussin * are met: 17*61d06d6bSBaptiste Daroussin * 1. Redistributions of source code must retain the above copyright 18*61d06d6bSBaptiste Daroussin * notice, this list of conditions and the following disclaimer. 19*61d06d6bSBaptiste Daroussin * 2. Redistributions in binary form must reproduce the above copyright 20*61d06d6bSBaptiste Daroussin * notice, this list of conditions and the following disclaimer in the 21*61d06d6bSBaptiste Daroussin * documentation and/or other materials provided with the distribution. 22*61d06d6bSBaptiste Daroussin * 23*61d06d6bSBaptiste Daroussin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 24*61d06d6bSBaptiste Daroussin * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 25*61d06d6bSBaptiste Daroussin * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 26*61d06d6bSBaptiste Daroussin * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 27*61d06d6bSBaptiste Daroussin * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28*61d06d6bSBaptiste Daroussin * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29*61d06d6bSBaptiste Daroussin * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30*61d06d6bSBaptiste Daroussin * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31*61d06d6bSBaptiste Daroussin * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32*61d06d6bSBaptiste Daroussin * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33*61d06d6bSBaptiste Daroussin * SUCH DAMAGE. 34*61d06d6bSBaptiste Daroussin */ 35*61d06d6bSBaptiste Daroussin 36*61d06d6bSBaptiste Daroussin #if HAVE_ERR 37*61d06d6bSBaptiste Daroussin #include <err.h> 38*61d06d6bSBaptiste Daroussin #endif 39*61d06d6bSBaptiste Daroussin #include <stdlib.h> 40*61d06d6bSBaptiste Daroussin #include <string.h> 41*61d06d6bSBaptiste Daroussin #include "compat_stringlist.h" 42*61d06d6bSBaptiste Daroussin 43*61d06d6bSBaptiste Daroussin #define _SL_CHUNKSIZE 20 44*61d06d6bSBaptiste Daroussin 45*61d06d6bSBaptiste Daroussin /* 46*61d06d6bSBaptiste Daroussin * sl_init(): Initialize a string list 47*61d06d6bSBaptiste Daroussin */ 48*61d06d6bSBaptiste Daroussin StringList * 49*61d06d6bSBaptiste Daroussin sl_init(void) 50*61d06d6bSBaptiste Daroussin { 51*61d06d6bSBaptiste Daroussin StringList *sl; 52*61d06d6bSBaptiste Daroussin 53*61d06d6bSBaptiste Daroussin sl = malloc(sizeof(StringList)); 54*61d06d6bSBaptiste Daroussin if (sl == NULL) 55*61d06d6bSBaptiste Daroussin err(1, "stringlist"); 56*61d06d6bSBaptiste Daroussin 57*61d06d6bSBaptiste Daroussin sl->sl_cur = 0; 58*61d06d6bSBaptiste Daroussin sl->sl_max = _SL_CHUNKSIZE; 59*61d06d6bSBaptiste Daroussin sl->sl_str = reallocarray(NULL, sl->sl_max, sizeof(char *)); 60*61d06d6bSBaptiste Daroussin if (sl->sl_str == NULL) 61*61d06d6bSBaptiste Daroussin err(1, "stringlist"); 62*61d06d6bSBaptiste Daroussin return sl; 63*61d06d6bSBaptiste Daroussin } 64*61d06d6bSBaptiste Daroussin 65*61d06d6bSBaptiste Daroussin 66*61d06d6bSBaptiste Daroussin /* 67*61d06d6bSBaptiste Daroussin * sl_add(): Add an item to the string list 68*61d06d6bSBaptiste Daroussin */ 69*61d06d6bSBaptiste Daroussin int 70*61d06d6bSBaptiste Daroussin sl_add(StringList *sl, char *name) 71*61d06d6bSBaptiste Daroussin { 72*61d06d6bSBaptiste Daroussin if (sl->sl_cur == sl->sl_max - 1) { 73*61d06d6bSBaptiste Daroussin sl->sl_max += _SL_CHUNKSIZE; 74*61d06d6bSBaptiste Daroussin sl->sl_str = reallocarray(sl->sl_str, 75*61d06d6bSBaptiste Daroussin sl->sl_max, sizeof(char *)); 76*61d06d6bSBaptiste Daroussin if (sl->sl_str == NULL) 77*61d06d6bSBaptiste Daroussin return (-1); 78*61d06d6bSBaptiste Daroussin } 79*61d06d6bSBaptiste Daroussin sl->sl_str[sl->sl_cur++] = name; 80*61d06d6bSBaptiste Daroussin return (0); 81*61d06d6bSBaptiste Daroussin } 82*61d06d6bSBaptiste Daroussin 83*61d06d6bSBaptiste Daroussin 84*61d06d6bSBaptiste Daroussin /* 85*61d06d6bSBaptiste Daroussin * sl_free(): Free a stringlist 86*61d06d6bSBaptiste Daroussin */ 87*61d06d6bSBaptiste Daroussin void 88*61d06d6bSBaptiste Daroussin sl_free(StringList *sl, int all) 89*61d06d6bSBaptiste Daroussin { 90*61d06d6bSBaptiste Daroussin size_t i; 91*61d06d6bSBaptiste Daroussin 92*61d06d6bSBaptiste Daroussin if (sl == NULL) 93*61d06d6bSBaptiste Daroussin return; 94*61d06d6bSBaptiste Daroussin if (sl->sl_str) { 95*61d06d6bSBaptiste Daroussin if (all) 96*61d06d6bSBaptiste Daroussin for (i = 0; i < sl->sl_cur; i++) 97*61d06d6bSBaptiste Daroussin free(sl->sl_str[i]); 98*61d06d6bSBaptiste Daroussin free(sl->sl_str); 99*61d06d6bSBaptiste Daroussin } 100*61d06d6bSBaptiste Daroussin free(sl); 101*61d06d6bSBaptiste Daroussin } 102*61d06d6bSBaptiste Daroussin 103*61d06d6bSBaptiste Daroussin 104*61d06d6bSBaptiste Daroussin /* 105*61d06d6bSBaptiste Daroussin * sl_find(): Find a name in the string list 106*61d06d6bSBaptiste Daroussin */ 107*61d06d6bSBaptiste Daroussin char * 108*61d06d6bSBaptiste Daroussin sl_find(StringList *sl, const char *name) 109*61d06d6bSBaptiste Daroussin { 110*61d06d6bSBaptiste Daroussin size_t i; 111*61d06d6bSBaptiste Daroussin 112*61d06d6bSBaptiste Daroussin for (i = 0; i < sl->sl_cur; i++) 113*61d06d6bSBaptiste Daroussin if (strcmp(sl->sl_str[i], name) == 0) 114*61d06d6bSBaptiste Daroussin return sl->sl_str[i]; 115*61d06d6bSBaptiste Daroussin 116*61d06d6bSBaptiste Daroussin return NULL; 117*61d06d6bSBaptiste Daroussin } 118*61d06d6bSBaptiste Daroussin 119*61d06d6bSBaptiste Daroussin #endif 120