mirror of
https://github.com/clearlinux/graphene.git
synced 2026-08-28 13:25:43 +00:00
67 lines
1.8 KiB
C
67 lines
1.8 KiB
C
/* SPDX-License-Identifier: LGPL-3.0-or-later */
|
|
/* Copyright (C) 2016 Stony Brook University
|
|
* Copyright (C) 2020 Invisible Things Lab
|
|
* Borys Popławski <borysp@invisiblethingslab.com>
|
|
* Copyright (C) 2020 Intel Corporation
|
|
* Michał Kowalczyk <mkow@invisiblethingslab.com>
|
|
*/
|
|
|
|
#include <stdint.h>
|
|
|
|
#include "api.h"
|
|
|
|
char* strdup(const char* str) {
|
|
return alloc_concat3(str, -1, NULL, 0, NULL, 0);
|
|
}
|
|
|
|
char* alloc_substr(const char* start, size_t len) {
|
|
return alloc_concat3(start, len, NULL, 0, NULL, 0);
|
|
}
|
|
|
|
char* alloc_concat(const char* a, size_t a_len, const char* b, size_t b_len) {
|
|
return alloc_concat3(a, a_len, b, b_len, NULL, 0);
|
|
}
|
|
|
|
char* alloc_concat3(const char* a, size_t a_len, const char* b, size_t b_len,
|
|
const char* c, size_t c_len) {
|
|
a_len = (a_len != (size_t)-1) ? a_len : (a ? strlen(a) : 0);
|
|
b_len = (b_len != (size_t)-1) ? b_len : (b ? strlen(b) : 0);
|
|
c_len = (c_len != (size_t)-1) ? c_len : (c ? strlen(c) : 0);
|
|
|
|
char* buf = malloc(a_len + b_len + c_len + 1);
|
|
if (!buf)
|
|
return NULL;
|
|
|
|
if (a_len)
|
|
memcpy(buf, a, a_len);
|
|
if (b_len)
|
|
memcpy(buf + a_len, b, b_len);
|
|
if (c_len)
|
|
memcpy(buf + a_len + b_len, c, c_len);
|
|
|
|
buf[a_len + b_len + c_len] = '\0';
|
|
return buf;
|
|
}
|
|
|
|
bool strstartswith(const char* str, const char* prefix) {
|
|
size_t prefix_len = strlen(prefix);
|
|
size_t str_len = strnlen(str, prefix_len);
|
|
|
|
if (str_len < prefix_len) {
|
|
return false;
|
|
}
|
|
|
|
return !memcmp(str, prefix, prefix_len);
|
|
}
|
|
|
|
bool strendswith(const char* str, const char* suffix) {
|
|
size_t str_len = strlen(str);
|
|
size_t suffix_len = strlen(suffix);
|
|
|
|
if (str_len < suffix_len) {
|
|
return false;
|
|
}
|
|
|
|
return !memcmp(&str[str_len - suffix_len], suffix, suffix_len);
|
|
}
|