38 # pragma GCC diagnostic error "-Wsign-conversion"
57 const size_t name_len = strlen(name);
60 memcpy(
left, name, (name_len + 1) *
sizeof(
char));
63 if ((name_len > 1 && name[name_len - 1] == delim) == 0) {
66 if (name[
a] == delim) {
68 *nr = atol(name +
a + 1);
75 if (isdigit(name[
a]) == 0) {
87 if (*
string ==
'\0') {
92 while (isdigit(*
string)) {
97 return *
string ==
'\0';
102 return ELEM(
c,
'.',
' ',
'-',
'_');
114 r_body[0] = r_suf[0] =
'\0';
116 for (i =
len; i > 0; i--) {
124 memcpy(r_body,
string,
len + 1);
135 r_body[0] = r_pre[0] =
'\0';
137 for (i = 1; i <
len; i++) {
160 const char *from_name,
161 const bool strip_number,
162 const size_t name_len)
165 char *prefix = alloca(name_len);
166 char *suffix = alloca(name_len);
167 char *replace = alloca(name_len);
168 char *number = alloca(name_len);
172 *prefix = *suffix = *replace = *number =
'\0';
184 if (isdigit(r_name[
len - 1])) {
185 index = strrchr(r_name,
'.');
186 if (index && isdigit(index[1])) {
187 if (strip_number ==
false) {
200 switch (r_name[
len - 1]) {
203 strcpy(replace,
"r");
207 strcpy(replace,
"l");
211 strcpy(replace,
"R");
215 strcpy(replace,
"L");
227 strcpy(replace,
"r");
232 strcpy(replace,
"l");
237 strcpy(replace,
"R");
242 strcpy(replace,
"L");
251 if (!is_set &&
len > 5) {
253 if (((index =
BLI_strcasestr(prefix,
"right")) == prefix) || (index == prefix +
len - 5)) {
255 if (index[0] ==
'r') {
256 strcpy(replace,
"left");
259 strcpy(replace, (index[1] ==
'I') ?
"LEFT" :
"Left");
264 else if (((index =
BLI_strcasestr(prefix,
"left")) == prefix) || (index == prefix +
len - 4)) {
266 if (index[0] ==
'l') {
267 strcpy(replace,
"right");
270 strcpy(replace, (index[1] ==
'E') ?
"RIGHT" :
"Right");
277 BLI_snprintf(r_name, name_len,
"%s%s%s%s", prefix, replace, suffix, number);
301 if (name[0] ==
'\0') {
305 if (unique_check(arg, name)) {
307 char *tempname = alloca(name_len);
308 char *
left = alloca(name_len);
313 const size_t numlen =
BLI_snprintf(numstr,
sizeof(numstr),
"%c%03d", delim, ++number) + 1;
317 if ((
len == 0) || (numlen >= name_len)) {
324 memcpy(tempname_buf, numstr, numlen);
326 }
while (unique_check(arg, tempname));
349 for (link = list->
first; link; link = link->
next) {
382 ListBase *list,
void *vlink,
const char *defname,
char delim,
int name_offset,
size_t name_len)
391 data.name_offset = name_offset;
421 const char *strings[],
425 char *c_end = &
result[result_len - 1];
426 for (
uint i = 0; i < strings_len; i++) {
427 const char *p = strings[i];
428 while (*p && (
c < c_end)) {
440 char *
result,
size_t result_len,
char sep,
const char *strings[],
uint strings_len)
443 char *c_end = &
result[result_len - 1];
444 for (
uint i = 0; i < strings_len; i++) {
450 const char *p = strings[i];
451 while (*p && (
c < c_end)) {
465 for (
uint i = 0; i < strings_len; i++) {
466 total_len += strlen(strings[i]);
470 for (
uint i = 0; i < strings_len; i++) {
483 for (
uint i = 0; i < strings_len; i++) {
484 total_len += strlen(strings[i]) + 1;
486 if (total_len == 0) {
492 if (strings_len != 0) {
493 for (
uint i = 0; i < strings_len; i++) {
510 const char *strings[],
514 for (
uint i = 0; i < strings_len; i++) {
515 total_len += strlen(strings[i]) + 1;
517 if (total_len == 0) {
523 if (strings_len != 0) {
524 for (
uint i = 0; i < strings_len; i++) {
char * BLI_strcasestr(const char *s, const char *find) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
size_t BLI_strcpy_rlen(char *__restrict dst, const char *__restrict src) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
size_t BLI_strnlen(const char *str, const size_t maxlen) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
size_t BLI_snprintf(char *__restrict dst, size_t maxncpy, const char *__restrict format,...) ATTR_NONNULL(1
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, const size_t maxncpy) ATTR_NONNULL()
size_t BLI_strncpy_utf8_rlen(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL()
bool(* UniquenameCheckCallback)(void *arg, const char *name)
#define POINTER_OFFSET(v, ofs)
These structs are the foundation for all linked lists in the library system.
Read Guarded memory(de)allocation.
void *(* MEM_mallocN)(size_t len, const char *str)
void BLI_string_flip_side_name(char *r_name, const char *from_name, const bool strip_number, const size_t name_len)
static bool is_char_sep(const char c)
void BLI_string_split_prefix(const char *string, char *r_pre, char *r_body, const size_t str_len)
bool BLI_uniquename(ListBase *list, void *vlink, const char *defname, char delim, int name_offset, size_t name_len)
char * BLI_string_join_arrayN(const char *strings[], uint strings_len)
char * BLI_string_join_array_by_sep_charN(char sep, const char *strings[], uint strings_len)
size_t BLI_split_name_num(char *left, int *nr, const char *name, const char delim)
char * BLI_string_join_array(char *result, size_t result_len, const char *strings[], uint strings_len)
bool BLI_uniquename_cb(UniquenameCheckCallback unique_check, void *arg, const char *defname, char delim, char *name, size_t name_len)
void BLI_string_split_suffix(const char *string, char *r_body, char *r_suf, const size_t str_len)
static bool uniquename_find_dupe(ListBase *list, void *vlink, const char *name, int name_offset)
char * BLI_string_join_array_by_sep_char_with_tableN(char sep, char *table[], const char *strings[], uint strings_len)
char * BLI_string_join_array_by_sep_char(char *result, size_t result_len, char sep, const char *strings[], uint strings_len)
bool BLI_string_is_decimal(const char *string)
static bool uniquename_unique_check(void *arg, const char *name)