blob: add strspn helpers
parent
024480aca0
commit
7cef96c30d
|
@ -23,12 +23,20 @@ typedef struct apk_blob apk_blob_t;
|
||||||
#define APK_BLOB_IS_NULL(blob) (blob.ptr == NULL)
|
#define APK_BLOB_IS_NULL(blob) (blob.ptr == NULL)
|
||||||
|
|
||||||
#define APK_BLOB_NULL ((apk_blob_t){0, NULL})
|
#define APK_BLOB_NULL ((apk_blob_t){0, NULL})
|
||||||
#define APK_BLOB_STR(str) ((apk_blob_t){strlen(str), (void *)(str)})
|
|
||||||
#define APK_BLOB_BUF(buf) ((apk_blob_t){sizeof(buf), (char *)(buf)})
|
#define APK_BLOB_BUF(buf) ((apk_blob_t){sizeof(buf), (char *)(buf)})
|
||||||
#define APK_BLOB_PTR_LEN(beg,len) ((apk_blob_t){(len), (beg)})
|
#define APK_BLOB_PTR_LEN(beg,len) ((apk_blob_t){(len), (beg)})
|
||||||
#define APK_BLOB_PTR_PTR(beg,end) APK_BLOB_PTR_LEN((beg),(end)-(beg)+1)
|
#define APK_BLOB_PTR_PTR(beg,end) APK_BLOB_PTR_LEN((beg),(end)-(beg)+1)
|
||||||
|
|
||||||
|
static inline apk_blob_t APK_BLOB_STR(const char *str)
|
||||||
|
{
|
||||||
|
if (str == NULL)
|
||||||
|
return APK_BLOB_NULL;
|
||||||
|
return ((apk_blob_t){strlen(str), (void *)(str)});
|
||||||
|
}
|
||||||
|
|
||||||
char *apk_blob_cstr(apk_blob_t str);
|
char *apk_blob_cstr(apk_blob_t str);
|
||||||
|
int apk_blob_spn(apk_blob_t blob, const char *accept, apk_blob_t *l, apk_blob_t *r);
|
||||||
|
int apk_blob_cspn(apk_blob_t blob, const char *reject, apk_blob_t *l, apk_blob_t *r);
|
||||||
int apk_blob_splitstr(apk_blob_t blob, const char *split, apk_blob_t *l, apk_blob_t *r);
|
int apk_blob_splitstr(apk_blob_t blob, const char *split, apk_blob_t *l, apk_blob_t *r);
|
||||||
int apk_blob_rsplit(apk_blob_t blob, char split, apk_blob_t *l, apk_blob_t *r);
|
int apk_blob_rsplit(apk_blob_t blob, char split, apk_blob_t *l, apk_blob_t *r);
|
||||||
unsigned apk_blob_uint(apk_blob_t blob, int base);
|
unsigned apk_blob_uint(apk_blob_t blob, int base);
|
||||||
|
|
28
src/blob.c
28
src/blob.c
|
@ -31,6 +31,34 @@ char *apk_blob_cstr(apk_blob_t blob)
|
||||||
return cstr;
|
return cstr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int apk_blob_spn(apk_blob_t blob, const char *accept, apk_blob_t *l, apk_blob_t *r)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < blob.len; i++) {
|
||||||
|
if (strchr(accept, blob.ptr[i]) == NULL) {
|
||||||
|
*l = APK_BLOB_PTR_LEN(blob.ptr, i);
|
||||||
|
*r = APK_BLOB_PTR_LEN(blob.ptr+i, blob.len-i);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int apk_blob_cspn(apk_blob_t blob, const char *reject, apk_blob_t *l, apk_blob_t *r)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < blob.len; i++) {
|
||||||
|
if (strchr(reject, blob.ptr[i]) != NULL) {
|
||||||
|
*l = APK_BLOB_PTR_LEN(blob.ptr, i);
|
||||||
|
*r = APK_BLOB_PTR_LEN(blob.ptr+i, blob.len-i);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int apk_blob_rsplit(apk_blob_t blob, char split, apk_blob_t *l, apk_blob_t *r)
|
int apk_blob_rsplit(apk_blob_t blob, char split, apk_blob_t *l, apk_blob_t *r)
|
||||||
{
|
{
|
||||||
char *sep;
|
char *sep;
|
||||||
|
|
Loading…
Reference in New Issue