diff options
author | Timo Teras <timo.teras@iki.fi> | 2009-04-14 18:46:35 +0300 |
---|---|---|
committer | Timo Teras <timo.teras@iki.fi> | 2009-04-14 18:46:35 +0300 |
commit | 7cef96c30d2f2d585aa2edd7b6ab22e9e007cddc (patch) | |
tree | 1f3d552a5cb9396c7408b021e1acc739a90289a3 /src | |
parent | 024480aca02a5a81113cdf7a47aafa4c1c30de3d (diff) | |
download | apk-tools-7cef96c30d2f2d585aa2edd7b6ab22e9e007cddc.tar.gz apk-tools-7cef96c30d2f2d585aa2edd7b6ab22e9e007cddc.tar.bz2 apk-tools-7cef96c30d2f2d585aa2edd7b6ab22e9e007cddc.tar.xz apk-tools-7cef96c30d2f2d585aa2edd7b6ab22e9e007cddc.zip |
blob: add strspn helpers
Diffstat (limited to 'src')
-rw-r--r-- | src/apk_blob.h | 10 | ||||
-rw-r--r-- | src/blob.c | 28 |
2 files changed, 37 insertions, 1 deletions
diff --git a/src/apk_blob.h b/src/apk_blob.h index fa7ad0f..7e63293 100644 --- a/src/apk_blob.h +++ b/src/apk_blob.h @@ -23,12 +23,20 @@ typedef struct apk_blob apk_blob_t; #define APK_BLOB_IS_NULL(blob) (blob.ptr == 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_PTR_LEN(beg,len) ((apk_blob_t){(len), (beg)}) #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); +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_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); @@ -31,6 +31,34 @@ char *apk_blob_cstr(apk_blob_t blob) 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) { char *sep; |