mirror of
https://github.com/yquake2/yquake2remaster.git
synced 2024-11-26 14:30:48 +00:00
Q_strdel and Q_strins utility functions
This commit is contained in:
parent
4b3545697e
commit
29eb6a601f
2 changed files with 53 additions and 0 deletions
|
@ -329,6 +329,13 @@ char *Q_strlwr(char *s);
|
||||||
int Q_strlcpy(char *dst, const char *src, int size);
|
int Q_strlcpy(char *dst, const char *src, int size);
|
||||||
int Q_strlcat(char *dst, const char *src, int size);
|
int Q_strlcat(char *dst, const char *src, int size);
|
||||||
|
|
||||||
|
/* Delete n characters from s starting at index i */
|
||||||
|
void Q_strdel(char *s, size_t i, size_t n);
|
||||||
|
|
||||||
|
/* Insert src into dest starting at index i, total, n is the total size of the buffer */
|
||||||
|
/* Returns length of src on success, 0 if there is not enough space in dest for src */
|
||||||
|
size_t Q_strins(char *dest, const char *src, size_t i, size_t n);
|
||||||
|
|
||||||
/* ============================================= */
|
/* ============================================= */
|
||||||
|
|
||||||
/* Unicode wrappers that also make sure it's a regular file around fopen(). */
|
/* Unicode wrappers that also make sure it's a regular file around fopen(). */
|
||||||
|
|
|
@ -1144,6 +1144,52 @@ Q_strlcat(char *dst, const char *src, int size)
|
||||||
return (d - dst) + Q_strlcpy(d, src, size);
|
return (d - dst) + Q_strlcpy(d, src, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Q_strdel(char *s, size_t i, size_t n)
|
||||||
|
{
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
if (!n)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
len = strlen(s);
|
||||||
|
|
||||||
|
if (i >= len || n > (len - i))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
memmove(s + i, s + i + n, len - i);
|
||||||
|
s[len - n] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t
|
||||||
|
Q_strins(char *dest, const char *src, size_t i, size_t n)
|
||||||
|
{
|
||||||
|
size_t dlen;
|
||||||
|
size_t slen;
|
||||||
|
|
||||||
|
if (!src || *src == '\0')
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
slen = strlen(src);
|
||||||
|
dlen = strlen(dest);
|
||||||
|
|
||||||
|
if (i > dlen || (dlen + slen + 1) > n)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
memmove(dest + i + slen, dest + i, dlen - i + 1);
|
||||||
|
memcpy(dest + i, src, slen);
|
||||||
|
|
||||||
|
return slen;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* An unicode compatible fopen() Wrapper for Windows.
|
* An unicode compatible fopen() Wrapper for Windows.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in a new issue