version 1.7, 2020/06/15 01:37:15 |
version 1.8, 2020/06/15 21:48:09 |
|
|
/* $Id$ */ |
/* $Id$ */ |
/* |
/* $NetBSD: stringlist.c,v 1.14 2015/05/21 01:29:13 christos Exp $ */ |
* Copyright (c) 1994 Christos Zoulas <christos@netbsd.org> |
|
|
/*- |
|
* Copyright (c) 1994, 1999 The NetBSD Foundation, Inc. |
* All rights reserved. |
* All rights reserved. |
* |
* |
|
* This code is derived from software contributed to The NetBSD Foundation |
|
* by Christos Zoulas. |
|
* |
* Redistribution and use in source and binary forms, with or without |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* modification, are permitted provided that the following conditions |
* are met: |
* are met: |
|
|
* notice, this list of conditions and the following disclaimer in the |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* documentation and/or other materials provided with the distribution. |
* |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS |
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS |
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED |
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY |
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS |
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* SUCH DAMAGE. |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
*/ |
#include "config.h" |
#include "config.h" |
|
|
#if HAVE_ERR |
|
#include <err.h> |
|
#endif |
|
#include <stdlib.h> |
#include <stdlib.h> |
#include <string.h> |
#include <string.h> |
#include "compat_stringlist.h" |
#include "compat_stringlist.h" |
|
|
|
|
sl = malloc(sizeof(StringList)); |
sl = malloc(sizeof(StringList)); |
if (sl == NULL) |
if (sl == NULL) |
err(1, "stringlist"); |
return NULL; |
|
|
sl->sl_cur = 0; |
sl->sl_cur = 0; |
sl->sl_max = _SL_CHUNKSIZE; |
sl->sl_max = _SL_CHUNKSIZE; |
sl->sl_str = reallocarray(NULL, sl->sl_max, sizeof(char *)); |
sl->sl_str = reallocarray(NULL, sl->sl_max, sizeof(char *)); |
if (sl->sl_str == NULL) |
if (sl->sl_str == NULL) { |
err(1, "stringlist"); |
free(sl); |
|
sl = NULL; |
|
} |
return sl; |
return sl; |
} |
} |
|
|
|
|
sl_add(StringList *sl, char *name) |
sl_add(StringList *sl, char *name) |
{ |
{ |
if (sl->sl_cur == sl->sl_max - 1) { |
if (sl->sl_cur == sl->sl_max - 1) { |
|
char **new; |
|
|
|
new = reallocarray(sl->sl_str, (sl->sl_max + _SL_CHUNKSIZE), |
|
sizeof(char *)); |
|
if (new == NULL) |
|
return -1; |
sl->sl_max += _SL_CHUNKSIZE; |
sl->sl_max += _SL_CHUNKSIZE; |
sl->sl_str = reallocarray(sl->sl_str, |
sl->sl_str = new; |
sl->sl_max, sizeof(char *)); |
|
if (sl->sl_str == NULL) |
|
return (-1); |
|
} |
} |
sl->sl_str[sl->sl_cur++] = name; |
sl->sl_str[sl->sl_cur++] = name; |
return (0); |
return 0; |
} |
} |
|
|
|
|
Line 108 sl_find(StringList *sl, const char *name) |
|
Line 115 sl_find(StringList *sl, const char *name) |
|
|
|
return NULL; |
return NULL; |
} |
} |
|
|
|
int |
|
sl_delete(StringList *sl, const char *name, int all) |
|
{ |
|
size_t i, j; |
|
|
|
for (i = 0; i < sl->sl_cur; i++) |
|
if (strcmp(sl->sl_str[i], name) == 0) { |
|
if (all) |
|
free(sl->sl_str[i]); |
|
for (j = i + 1; j < sl->sl_cur; j++) |
|
sl->sl_str[j - 1] = sl->sl_str[j]; |
|
sl->sl_str[--sl->sl_cur] = NULL; |
|
return 0; |
|
} |
|
return -1; |
|
} |
|
|