Files
2026-07-23 00:18:08 +02:00

44 lines
845 B
C

#include <stddef.h>
#include "str.h"
static bool intToIndex(String string, int i, size_t *out_index) {
int val = 0;
bool is_ok = true;
if (i >= 0) {
val = i;
} else {
val = string.size + 1 + i;
}
if (val < 0) {
val = 0;
is_ok = false;
} else if (val > string.size) {
val = string.size;
is_ok = false;
}
*out_index = val;
return is_ok;
}
bool StringSub(String string, int start, int end, String *out_substr) {
size_t start_index = 0;
bool start_ok = intToIndex(string, start, &start_index);
size_t end_index = 0;
bool end_ok = intToIndex(string, end, &end_index);
if (string.size == 0 || start_index >= end_index) {
out_substr->size=0;
out_substr->buffer=NULL;
return false;
}
out_substr->buffer = &string.buffer[start_index];
out_substr->size = end_index - start_index;
return start_ok && end_ok;
}