22 # pragma GCC diagnostic error "-Wsign-conversion"
27 const size_t name_len = strlen(name);
30 memcpy(
left, name, (name_len + 1) *
sizeof(
char));
33 if ((name_len > 1 && name[name_len - 1] == delim) == 0) {
36 if (name[
a] == delim) {
38 *nr = atol(name +
a + 1);
45 if (isdigit(name[
a]) == 0) {
57 if (*
string ==
'\0') {
62 while (isdigit(*
string)) {
67 return *
string ==
'\0';
72 return ELEM(
c,
'.',
' ',
'-',
'_');
80 r_body[0] = r_suf[0] =
'\0';
82 for (i =
len; i > 0; i--) {
90 memcpy(r_body,
string,
len + 1);
98 r_body[0] = r_pre[0] =
'\0';
100 for (i = 1; i <
len; i++) {
113 const char *from_name,
114 const bool strip_number,
115 const size_t name_len)
118 char *prefix = alloca(name_len);
119 char *suffix = alloca(name_len);
120 char *replace = alloca(name_len);
121 char *number = alloca(name_len);
125 *prefix = *suffix = *replace = *number =
'\0';
135 if (isdigit(r_name[
len - 1])) {
136 index = strrchr(r_name,
'.');
137 if (index && isdigit(index[1])) {
138 if (strip_number ==
false) {
151 switch (r_name[
len - 1]) {
154 strcpy(replace,
"r");
158 strcpy(replace,
"l");
162 strcpy(replace,
"R");
166 strcpy(replace,
"L");
178 strcpy(replace,
"r");
183 strcpy(replace,
"l");
188 strcpy(replace,
"R");
193 strcpy(replace,
"L");
202 if (!is_set &&
len > 5) {
204 if (((index =
BLI_strcasestr(prefix,
"right")) == prefix) || (index == prefix +
len - 5)) {
206 if (index[0] ==
'r') {
207 strcpy(replace,
"left");
210 strcpy(replace, (index[1] ==
'I') ?
"LEFT" :
"Left");
215 else if (((index =
BLI_strcasestr(prefix,
"left")) == prefix) || (index == prefix +
len - 4)) {
217 if (index[0] ==
'l') {
218 strcpy(replace,
"right");
221 strcpy(replace, (index[1] ==
'E') ?
"RIGHT" :
"Right");
228 return BLI_snprintf_rlen(r_name, name_len,
"%s%s%s%s", prefix, replace, suffix, number);
240 if (name[0] ==
'\0') {
244 if (unique_check(arg, name)) {
246 char *tempname = alloca(name_len);
247 char *
left = alloca(name_len);
252 const size_t numlen =
BLI_snprintf(numstr,
sizeof(numstr),
"%c%03d", delim, ++number) + 1;
256 if ((
len == 0) || (numlen >= name_len)) {
263 memcpy(tempname_buf, numstr, numlen);
265 }
while (unique_check(arg, tempname));
288 for (link = list->
first; link; link = link->
next) {
310 ListBase *list,
void *vlink,
const char *defname,
char delim,
int name_offset,
size_t name_len)
319 data.name_offset = name_offset;
349 const char *strings[],
353 char *c_end = &
result[result_len - 1];
354 for (
uint i = 0; i < strings_len; i++) {
355 const char *p = strings[i];
356 while (*p && (
c < c_end)) {
365 char *
result,
size_t result_len,
char sep,
const char *strings[],
uint strings_len)
368 char *c_end = &
result[result_len - 1];
369 for (
uint i = 0; i < strings_len; i++) {
375 const char *p = strings[i];
376 while (*p && (
c < c_end)) {
387 for (
uint i = 0; i < strings_len; i++) {
388 total_len += strlen(strings[i]);
392 for (
uint i = 0; i < strings_len; i++) {
403 for (
uint i = 0; i < strings_len; i++) {
404 total_len += strlen(strings[i]) + 1;
406 if (total_len == 0) {
412 if (strings_len != 0) {
413 for (
uint i = 0; i < strings_len; i++) {
426 const char *strings[],
430 for (
uint i = 0; i < strings_len; i++) {
431 total_len += strlen(strings[i]) + 1;
433 if (total_len == 0) {
439 if (strings_len != 0) {
440 for (
uint i = 0; i < strings_len; i++) {
size_t BLI_strncpy_rlen(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
char * BLI_strcasestr(const char *s, const char *find) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
size_t BLI_strnlen(const char *str, size_t maxlen) 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_snprintf_rlen(char *__restrict dst, size_t maxncpy, const char *__restrict format,...) ATTR_NONNULL(1
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL()
size_t BLI_snprintf(char *__restrict dst, size_t maxncpy, const char *__restrict format,...) ATTR_NONNULL(1
char size_t BLI_strncpy_utf8_rlen(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
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)
static bool is_char_sep(const char c)
size_t BLI_string_flip_side_name(char *r_name, const char *from_name, const bool strip_number, const size_t name_len)
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)