| /* |
| * Copyright (c) 1994 Christos Zoulas |
| * All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * 1. Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * 2. Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * 4. The name of the author may not be used to endorse or promote products |
| * derived from this software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS |
| * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
| * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY |
| * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
| * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| * SUCH DAMAGE. |
| */ |
| |
| /* |
| * Copyright 2012 Nexenta Systems, Inc. All rights reserved. |
| */ |
| |
| #include <err.h> |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| |
| #include "stringlist.h" |
| |
| #define _SL_CHUNKSIZE 20 |
| |
| stringlist * |
| sl_init(void) |
| { |
| stringlist *sl; |
| |
| if ((sl = malloc(sizeof (stringlist))) == NULL) |
| err(1, "malloc"); |
| |
| sl->sl_cur = 0; |
| sl->sl_max = _SL_CHUNKSIZE; |
| sl->sl_str = malloc(sl->sl_max * sizeof (char *)); |
| if (sl->sl_str == NULL) |
| err(1, "malloc"); |
| |
| return (sl); |
| } |
| |
| int |
| sl_add(stringlist *sl, char *name) |
| { |
| |
| if (sl->sl_cur == sl->sl_max - 1) { |
| sl->sl_max += _SL_CHUNKSIZE; |
| sl->sl_str = realloc(sl->sl_str, sl->sl_max * sizeof (char *)); |
| if (sl->sl_str == NULL) |
| return (-1); |
| } |
| sl->sl_str[sl->sl_cur++] = name; |
| |
| return (0); |
| } |
| |
| |
| void |
| sl_free(stringlist *sl, int all) |
| { |
| size_t i; |
| |
| if (sl == NULL) |
| return; |
| if (sl->sl_str) { |
| if (all) |
| for (i = 0; i < sl->sl_cur; i++) |
| free(sl->sl_str[i]); |
| free(sl->sl_str); |
| } |
| free(sl); |
| } |
| |
| |
| char * |
| sl_find(stringlist *sl, char *name) |
| { |
| size_t i; |
| |
| for (i = 0; i < sl->sl_cur; i++) |
| if (strcmp(sl->sl_str[i], name) == 0) |
| return (sl->sl_str[i]); |
| |
| return (NULL); |
| } |