Replace defective strsep.

This commit is contained in:
wb2osz 2019-10-14 19:08:49 -04:00
parent 3765f26554
commit 316c8d8194
2 changed files with 73 additions and 30 deletions

View File

@ -4,31 +4,24 @@ Files in this directory fill in the gaps missing for some operating systems.
-------------------------------------- --------------------------------------
These are part of the standard C library for Linux and similar operating systems. These are part of the standard C library for Linux, BSD Unix, and similar operating systems.
For the Windows version we need to include our own copy. They are not present for MS Windows so we need to supply our own copy.
They were copied from Cygwin source. From http://ftp.netbsd.org/pub/pkgsrc/current/pkgsrc/net/tnftp/files/libnetbsd/strsep.c
/usr/src/cygwin-1.7.10-1/newlib/libc/string/... and other BSD locations.
strsep.c strsep.c
strcasestr.c
strtok_r.c strtok_r.c
-------------------------------------- --------------------------------------
This was also missing on Windows but available everywhere else.
strcasestr.c These are needed for the Linux and Windows versions.
--------------------------------------
The are used for the Linux and Windows versions.
They should be part of the standard C library for OpenBSD, FreeBSD, Mac OS X. They should be part of the standard C library for OpenBSD, FreeBSD, Mac OS X.
These are from OpenBSD.
http://ftp.netbsd.org/pub/pkgsrc/current/pkgsrc/net/tnftp/files/libnetbsd/strlcpy.c http://ftp.netbsd.org/pub/pkgsrc/current/pkgsrc/net/tnftp/files/libnetbsd/strlcpy.c
http://ftp.netbsd.org/pub/pkgsrc/current/pkgsrc/net/tnftp/files/libnetbsd/strlcat.c http://ftp.netbsd.org/pub/pkgsrc/current/pkgsrc/net/tnftp/files/libnetbsd/strlcat.c
strlcpy.c strlcpy.c
strlcat.c strlcat.c

View File

@ -1,22 +1,72 @@
/* BSD strsep function */ /* $NetBSD: strsep.c,v 1.5 2014/10/31 18:59:32 spz Exp $ */
/* from NetBSD: strsep.c,v 1.14 2003/08/07 16:43:52 agc Exp */
/* Copyright 2002, Red Hat Inc. */ /*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. 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.
* 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
*/
/* undef STRICT_ANSI so that strsep prototype will be defined */ //#include "tnftp.h"
#undef __STRICT_ANSI__
#include <string.h> #include <string.h>
//#include <_ansi.h>
//#include <reent.h>
#define _DEFUN(name,arglist,args) name(args)
#define _AND ,
extern char *__strtok_r (char *, const char *, char **, int);
/*
* Get next token from string *stringp, where tokens are possibly-empty
* strings separated by characters from delim.
*
* Writes NULs into the string at *stringp to end tokens.
* delim need not remain constant from call to call.
* On return, *stringp points past the last NUL written (if there might
* be further tokens), or is NULL (if there are definitely no more tokens).
*
* If *stringp is NULL, strsep returns NULL.
*/
char * char *
_DEFUN (strsep, (source_ptr, delim), strsep(char **stringp, const char *delim)
register char **source_ptr _AND
register const char *delim)
{ {
return __strtok_r (*source_ptr, delim, source_ptr, 0); char *s;
const char *spanp;
int c, sc;
char *tok;
if ((s = *stringp) == NULL)
return (NULL);
for (tok = s;;) {
c = *s++;
spanp = delim;
do {
if ((sc = *spanp++) == c) {
if (c == 0)
s = NULL;
else
s[-1] = 0;
*stringp = s;
return (tok);
}
} while (sc != 0);
}
/* NOTREACHED */
} }