#ifndef PK_STR_H #define PK_STR_H #include struct pk_str { char *val; uint32_t length; uint32_t reserved; }; struct pk_cstr { const char *val; uint32_t length; uint32_t reserved; }; struct pk_str cstring_to_pk_str(char *s); struct pk_cstr cstring_to_pk_cstr(const char *s); struct pk_str pk_cstr_to_pk_str(const struct pk_cstr *s); struct pk_cstr pk_str_to_pk_cstr(const struct pk_str *s); int pk_compare_str(const struct pk_str *lhs, const struct pk_str *rhs); int pk_compare_cstr(const struct pk_cstr *lhs, const struct pk_cstr *rhs); #endif /* PK_STR_H */ #ifdef PK_IMPL_STR #include "./pkmacros.h" /* deleteme */ #include struct pk_str cstring_to_pk_str(char *s) { return (struct pk_str) { .val = s, .length = (uint32_t)(strlen(s)), .reserved = 0, }; } struct pk_cstr cstring_to_pk_cstr(const char *s) { return (struct pk_cstr) { .val = s, .length = (uint32_t)(strlen(s)), .reserved = 0, }; } struct pk_str pk_cstr_to_pk_str(const struct pk_cstr *s) { return (struct pk_str) { .val = (char *)(s->val), .length = s->length, .reserved = s->reserved, }; } struct pk_cstr pk_str_to_pk_cstr(const struct pk_str *s) { return (struct pk_cstr) { .val = (char *)(s->val), .length = s->length, .reserved = s->reserved, }; } int pk_compare_str(const struct pk_str *lhs, const struct pk_str *rhs) { return strncmp(lhs->val, rhs->val, PK_MIN(lhs->length, rhs->length)); } int pk_compare_cstr(const struct pk_cstr *lhs, const struct pk_cstr *rhs) { return strncmp(lhs->val, rhs->val, PK_MIN(lhs->length, rhs->length)); } #endif /* PK_IMPL_STR */