]> git.sur5r.net Git - openldap/blob - libraries/libldap/string.c
Provide build support for sasl.c.
[openldap] / libraries / libldap / string.c
1 /*
2  * Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
3  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
4  */
5
6 #include "portable.h"
7
8 #include <ac/stdlib.h>
9 #include <ac/string.h>
10 #include <ac/time.h>
11
12 #include "ldap-int.h"
13
14
15 #if defined ( HAVE_STRSPN )
16 #define int_strspn strspn
17 #else
18 static int int_strspn( const char *str, const char *delim )
19 {
20         int pos;
21         const char *p=delim;
22
23         for( pos=0; (*str) ; pos++,str++) {
24                 if (*str!=*p) {
25                         for( p=delim; (*p) ; p++ ) {
26                                 if (*str==*p) {
27                                         break;
28                                 }
29                         }
30                 }
31
32                 if (*p=='\0') {
33                         return pos;
34                 }
35         }
36         return pos;
37 }
38 #endif
39
40 #if defined( HAVE_STRPBRK )
41 #define int_strpbrk strpbrk
42 #else
43 static char *(int_strpbrk)( const char *str, const char *accept )
44 {
45         const char *p;
46
47         for( ; (*str) ; str++ ) {
48                 for( p=accept; (*p) ; p++) {
49                         if (*str==*p) {
50                                 return str;
51                         }
52                 }
53         }
54
55         return NULL;
56 }
57 #endif
58
59 char *(ldap_pvt_strtok)( char *str, const char *delim, char **pos )
60 {
61         char *p;
62
63         if (pos==NULL) {
64                 return NULL;
65         }
66
67         if (str==NULL) {
68                 if (*pos==NULL) {
69                         return NULL;
70                 }
71
72                 str=*pos;
73         }
74
75         /* skip any initial delimiters */
76         str += int_strspn( str, delim );
77         if (*str == '\0') {
78                 return NULL;
79         }
80
81         p = int_strpbrk( str, delim );
82         if (p==NULL) {
83                 *pos = NULL;
84
85         } else {
86                 *p ='\0';
87                 *pos = p+1;
88         }
89
90         return str;
91 }
92
93 char *
94 (ldap_pvt_strdup)( const char *s )
95 {
96         char    *p;
97         size_t  len = strlen( s ) + 1;
98
99         if ( (p = (char *) malloc( len )) == NULL ) {
100                 return( NULL );
101         }
102
103         memcpy( p, s, len );
104         return( p );
105 }