[BACK]Return to compat_stringlist.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Diff for /mandoc/compat_stringlist.c between version 1.1 and 1.8

version 1.1, 2015/05/20 20:55:04 version 1.8, 2020/06/15 21:48:09
Line 1 
Line 1 
 /*  /*      $Id$ */
  * Copyright (c) 1994 Christos Zoulas  /*      $NetBSD: stringlist.c,v 1.14 2015/05/21 01:29:13 christos Exp $ */
   
   /*-
    * 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:
Line 10 
Line 16 
  * 2. Redistributions in binary form must reproduce the above copyright   * 2. Redistributions in binary form must reproduce the above copyright
  *    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.
  * 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   * 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"
   
 #if defined(LIBC_SCCS) && !defined(lint)  
 static char *rcsid = "$NetBSD: stringlist.c,v 1.2 1997/01/17 07:26:20 lukem Exp $";  
 #endif /* LIBC_SCCS and not lint */  
 #include <sys/cdefs.h>  
 __FBSDID("$FreeBSD$");  
   
 #include "namespace.h"  
 #include <stdio.h>  
 #include <string.h>  
 #include <err.h>  
 #include <stdlib.h>  #include <stdlib.h>
 #include <stringlist.h>  #include <string.h>
 #include "un-namespace.h"  #include "compat_stringlist.h"
   
 #define _SL_CHUNKSIZE   20  #define _SL_CHUNKSIZE   20
   
Line 52  sl_init(void)
Line 47  sl_init(void)
   
         sl = malloc(sizeof(StringList));          sl = malloc(sizeof(StringList));
         if (sl == NULL)          if (sl == NULL)
                 _err(1, "stringlist: %m");                  return NULL;
   
         sl->sl_cur = 0;          sl->sl_cur = 0;
         sl->sl_max = _SL_CHUNKSIZE;          sl->sl_max = _SL_CHUNKSIZE;
         sl->sl_str = malloc(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: %m");                  free(sl);
                   sl = NULL;
           }
         return sl;          return sl;
 }  }
   
Line 70  int
Line 67  int
 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 = reallocf(sl->sl_str, sl->sl_max * sizeof(char *));                  sl->sl_str = new;
                 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 114  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;
   }
   

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.8

CVSweb