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.
For the Windows version we need to include our own copy.
These are part of the standard C library for Linux, BSD Unix, and similar operating systems.
They are not present for MS Windows so we need to supply our own copy.
They were copied from Cygwin source.
/usr/src/cygwin-1.7.10-1/newlib/libc/string/...
From http://ftp.netbsd.org/pub/pkgsrc/current/pkgsrc/net/tnftp/files/libnetbsd/strsep.c
and other BSD locations.
strsep.c
strcasestr.c
strtok_r.c
--------------------------------------
This was also missing on Windows but available everywhere else.
strcasestr.c
--------------------------------------
The are used for the Linux and Windows versions.
These are needed for the Linux and Windows versions.
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/strlcat.c
strlcpy.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 */
#undef __STRICT_ANSI__
//#include "tnftp.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 *
_DEFUN (strsep, (source_ptr, delim),
register char **source_ptr _AND
register const char *delim)
strsep(char **stringp, 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 */
}