add epicsStrnLen()
Base currently requires only POSIX 2001 while strnlen() is part of POSIX 2008.
This commit is contained in:
committed by
Michael Davidsaver
parent
0f7f4710c6
commit
746c739769
@@ -239,6 +239,18 @@ int epicsStrPrintEscaped(FILE *fp, const char *s, size_t len)
|
||||
return nout;
|
||||
}
|
||||
|
||||
/* Until Base requires POSIX 2008 we must provide our own implementation */
|
||||
size_t epicsStrnLen(const char *s, size_t maxlen)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
for (i=0; i<maxlen; i++) {
|
||||
if(s[i]=='\0')
|
||||
return i;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
int epicsStrGlobMatch(const char *str, const char *pattern)
|
||||
{
|
||||
const char *cp = NULL, *mp = NULL;
|
||||
|
||||
@@ -33,6 +33,7 @@ epicsShareFunc int epicsStrnCaseCmp(const char *s1, const char *s2, size_t len);
|
||||
epicsShareFunc char * epicsStrDup(const char *s);
|
||||
epicsShareFunc int epicsStrPrintEscaped(FILE *fp, const char *s, size_t n);
|
||||
#define epicsStrSnPrintEscaped epicsStrnEscapedFromRaw
|
||||
epicsShareFunc size_t epicsStrnLen(const char *s, size_t maxlen);
|
||||
epicsShareFunc int epicsStrGlobMatch(const char *str, const char *pattern);
|
||||
epicsShareFunc char * epicsStrtok_r(char *s, const char *delim, char **lasts);
|
||||
epicsShareFunc unsigned int epicsStrHash(const char *str, unsigned int seed);
|
||||
|
||||
@@ -51,7 +51,7 @@ MAIN(epicsStringTest)
|
||||
char *s;
|
||||
int status;
|
||||
|
||||
testPlan(299);
|
||||
testPlan(303);
|
||||
|
||||
testChars();
|
||||
|
||||
@@ -86,6 +86,11 @@ MAIN(epicsStringTest)
|
||||
testOk1(epicsStrHash(abcd, 0) == epicsMemHash(abcde, 4, 0));
|
||||
testOk1(epicsStrHash(abcd, 0) != epicsMemHash("abcd\0", 5, 0));
|
||||
|
||||
testOk1(epicsStrnLen("abcd", 5)==4);
|
||||
testOk1(epicsStrnLen("abcd", 4)==4);
|
||||
testOk1(epicsStrnLen("abcd", 3)==3);
|
||||
testOk1(epicsStrnLen("abcd", 0)==0);
|
||||
|
||||
memset(result, 'x', sizeof(result));
|
||||
status = epicsStrnEscapedFromRaw(result, 4, ABCD, 3);
|
||||
testOk(status == 3, "epicsStrnEscapedFromRaw returned %d (exp. 3)", status);
|
||||
|
||||
Reference in New Issue
Block a user