// SPDX-License-Identifier: MPL-2.0 // Copyright (c) Yuxuan Shui #pragma once #include #include #define mstrncmp(s1, s2) strncmp((s1), (s2), strlen(s1)) char *mstrjoin(const char *src1, const char *src2); char * mstrjoin3(const char *src1, const char *src2, const char *src3); void mstrextend(char **psrc1, const char *src2); /// Parse a floating point number of form (+|-)?[0-9]*(\.[0-9]*) double strtod_simple(const char *, const char **); static inline int uitostr(unsigned int n, char *buf) { int ret = 0; unsigned int tmp = n; while (tmp > 0) { tmp /= 10; ret++; } if (ret == 0) ret = 1; int pos = ret; while (pos--) { buf[pos] = n%10 + '0'; n /= 10; } return ret; } static inline const char * skip_space_const(const char *src) { if (!src) return NULL; while (*src && isspace(*src)) src++; return src; } static inline char * skip_space_mut(char *src) { if (!src) return NULL; while (*src && isspace(*src)) src++; return src; } #define skip_space(x) _Generic((x), \ char *: skip_space_mut, \ const char *: skip_space_const \ )(x)