2018-12-16 01:42:37 +08:00
|
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
// Copyright (c) Yuxuan Shui <yshuiv7@gmail.com>
|
|
|
|
#pragma once
|
|
|
|
#include <ctype.h>
|
|
|
|
#include <stddef.h>
|
|
|
|
|
|
|
|
#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);
|
|
|
|
|
2018-12-20 22:13:14 +08:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
2018-12-16 01:42:37 +08:00
|
|
|
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)
|