windows-nt/Source/XPSP1/NT/base/crts/crtw32/string/wcsspn.c
2020-09-26 16:20:57 +08:00

75 lines
2.3 KiB
C

/***
*wcsspn.c - find length of initial substring of chars from a control string
* (wide-character strings)
*
* Copyright (c) 1985-2001, Microsoft Corporation. All rights reserved.
*
*Purpose:
* defines wcsspn() - finds the length of the initial substring of
* a string consisting entirely of characters from a control string
* (wide-character strings).
*
*Revision History:
* 11-04-91 ETC Created with source from crtdll.
* 04-07-92 KRS Updated and ripped out _INTL switches.
* 04-06-93 SKS Replace _CRTAPI* with __cdecl
* 02-07-94 CFW POSIXify.
* 02-27-98 RKP Added 64 bit support.
*
*******************************************************************************/
#ifndef _POSIX_
#include <cruntime.h>
#include <string.h>
/***
*int wcsspn(string, control) - find init substring of control chars
*
*Purpose:
* Finds the index of the first character in string that does belong
* to the set of characters specified by control. This is
* equivalent to the length of the initial substring of string that
* consists entirely of characters from control. The L'\0' character
* that terminates control is not considered in the matching process
* (wide-character strings).
*
*Entry:
* wchar_t *string - string to search
* wchar_t *control - string containing characters not to search for
*
*Exit:
* returns index of first wchar_t in string not in control
*
*Exceptions:
*
*******************************************************************************/
size_t __cdecl wcsspn (
const wchar_t * string,
const wchar_t * control
)
{
wchar_t *str = (wchar_t *) string;
wchar_t *ctl;
/* 1st char not in control string stops search */
while (*str) {
for (ctl = (wchar_t *)control; *ctl != *str; ctl++) {
if (*ctl == (wchar_t)0) {
/*
* reached end of control string without finding a match
*/
return (size_t)(str - string);
}
}
str++;
}
/*
* The whole string consisted of characters from control
*/
return (size_t)(str - string);
}
#endif /* _POSIX_ */