size_t __attribute__((weak)) strcspn(const char *s, const char *reject) { return __strxspn(s, reject, 1); }
/*@ requires \exists integer i; Length_of_str_is(s,i); requires \exists integer i; Length_of_str_is(reject,i); requires \separated(s+(0..Length(s)), reject+(0..Length(reject))); assigns \nothing; ensures \forall integer i; 0 <= i < \result ==> !char_in_str(reject, s[i]); ensures char_in_str(reject, s[\result]); ensures 0 <= \result <= Length(s); @*/ size_t strcspn(const char *s, const char *reject) { return __strxspn(s, reject, 1); }
char *strpbrk(const char *s, const char *accept) { const char *ss = s + __strxspn(s, accept, 1); return *ss ? (char *)ss : NULL; }
/*@ requires \exists integer i; Length_of_str_is(s,i); requires \exists integer i; Length_of_str_is(accept,i); requires \separated(s+(0..Length(s)), accept+(0..Length(accept))); assigns \nothing; ensures \forall integer i; 0 <= i < \result ==> char_in_str(accept, s[i]); ensures !char_in_str(accept, s[\result]); ensures 0 <= \result <= Length(s); @*/ size_t strspn(const char *s, const char *accept) { return __strxspn(s, accept, 0); }