Module Name: othersrc Committed By: lukem Date: Sat Sep 23 02:56:09 UTC 2023
Modified Files: othersrc/libexec/tnftpd: tnftpd.h othersrc/libexec/tnftpd/libnetbsd: sl_init.c Log Message: sync lib/libc/gen/stringlist.c 1.13 Functional changes since upstream 1.8: - 1.11: Add sl_delete. Change sl_find() to use const char * argument. - 1.10: Don't update the size of allocated storage until realloc successes. Note: not updating to upstream 1.15 because that was a refactor to use reallocarr() which I'm deferring for now. Comment out other unneeded upstream code to minimise differences. Update sl_find() and sl_delete() declarations in tnftpd.h per include/stringlist.h rev 1.6. To generate a diff of this commit: cvs rdiff -u -r1.37 -r1.38 othersrc/libexec/tnftpd/tnftpd.h cvs rdiff -u -r1.3 -r1.4 othersrc/libexec/tnftpd/libnetbsd/sl_init.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: othersrc/libexec/tnftpd/tnftpd.h diff -u othersrc/libexec/tnftpd/tnftpd.h:1.37 othersrc/libexec/tnftpd/tnftpd.h:1.38 --- othersrc/libexec/tnftpd/tnftpd.h:1.37 Tue Jan 29 13:06:14 2019 +++ othersrc/libexec/tnftpd/tnftpd.h Sat Sep 23 02:56:08 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: tnftpd.h,v 1.37 2019/01/29 13:06:14 lukem Exp $ */ +/* $NetBSD: tnftpd.h,v 1.38 2023/09/23 02:56:08 lukem Exp $ */ #define FTPD_VERSION PACKAGE_STRING @@ -224,10 +224,11 @@ typedef struct _stringlist { size_t sl_cur; } StringList; -StringList *sl_init(void); -int sl_add(StringList *, char *); -void sl_free(StringList *, int); -char *sl_find(StringList *, char *); +StringList *sl_init(void); +int sl_add(StringList *, char *); +void sl_free(StringList *, int); +char *sl_find(StringList *, const char *); +int sl_delete(StringList *, const char *, int); #if !defined(NO_INTERNAL_LS) Index: othersrc/libexec/tnftpd/libnetbsd/sl_init.c diff -u othersrc/libexec/tnftpd/libnetbsd/sl_init.c:1.3 othersrc/libexec/tnftpd/libnetbsd/sl_init.c:1.4 --- othersrc/libexec/tnftpd/libnetbsd/sl_init.c:1.3 Sun Sep 21 16:35:25 2008 +++ othersrc/libexec/tnftpd/libnetbsd/sl_init.c Sat Sep 23 02:56:08 2023 @@ -1,5 +1,7 @@ -/* $NetBSD: sl_init.c,v 1.3 2008/09/21 16:35:25 lukem Exp $ */ -/* from NetBSD: stringlist.c,v 1.8 1999/11/28 03:44:09 lukem Exp */ +/* $NetBSD: sl_init.c,v 1.4 2023/09/23 02:56:08 lukem Exp $ */ + +/* from: NetBSD: stringlist.c,v 1.13 2008/04/28 20:22:59 martin Exp */ +/* upstream: lib/libc/gen/stringlist.c */ /*- * Copyright (c) 1994, 1999 The NetBSD Foundation, Inc. @@ -32,6 +34,30 @@ #include "tnftpd.h" +#if 0 +#include <sys/cdefs.h> +#if defined(LIBC_SCCS) && !defined(lint) +__RCSID("$NetBSD: sl_init.c,v 1.4 2023/09/23 02:56:08 lukem Exp $"); +#endif /* LIBC_SCCS and not lint */ + +#include "namespace.h" + +#include <assert.h> +#include <err.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <stringlist.h> + +#ifdef __weak_alias +__weak_alias(sl_add,_sl_add) +__weak_alias(sl_find,_sl_find) +__weak_alias(sl_free,_sl_free) +__weak_alias(sl_init,_sl_init) +__weak_alias(sl_delete,_sl_delete) +#endif +#endif + #define _SL_CHUNKSIZE 20 /* @@ -44,7 +70,7 @@ sl_init(void) sl = malloc(sizeof(StringList)); if (sl == NULL) - return (NULL); + return NULL; sl->sl_cur = 0; sl->sl_max = _SL_CHUNKSIZE; @@ -53,7 +79,7 @@ sl_init(void) free(sl); sl = NULL; } - return (sl); + return sl; } @@ -63,17 +89,21 @@ sl_init(void) int sl_add(StringList *sl, char *name) { + + _DIAGASSERT(sl != NULL); + if (sl->sl_cur == sl->sl_max - 1) { char **new; - sl->sl_max += _SL_CHUNKSIZE; - new = (char **)realloc(sl->sl_str, sl->sl_max * sizeof(char *)); + new = realloc(sl->sl_str, + (sl->sl_max + _SL_CHUNKSIZE) * sizeof(char *)); if (new == NULL) - return (-1); + return -1; + sl->sl_max += _SL_CHUNKSIZE; sl->sl_str = new; } sl->sl_str[sl->sl_cur++] = name; - return (0); + return 0; } @@ -101,13 +131,33 @@ sl_free(StringList *sl, int all) * sl_find(): Find a name in the string list */ char * -sl_find(StringList *sl, char *name) +sl_find(StringList *sl, const char *name) { size_t i; + _DIAGASSERT(sl != NULL); + for (i = 0; i < sl->sl_cur; i++) if (strcmp(sl->sl_str[i], name) == 0) return sl->sl_str[i]; - 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; +} +