mirror of
https://git.proxmox.com/git/efi-boot-shim
synced 2025-06-14 09:31:38 +00:00
113 lines
1.8 KiB
C
113 lines
1.8 KiB
C
// SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
|
#ifndef SHIM_STR_H
|
|
#define SHIM_STR_H
|
|
|
|
static inline __attribute__((unused)) unsigned long
|
|
strnlena(const CHAR8 *s, unsigned long n)
|
|
{
|
|
unsigned long i;
|
|
for (i = 0; i < n; i++)
|
|
if (s[i] == '\0')
|
|
break;
|
|
return i;
|
|
}
|
|
|
|
static inline
|
|
__attribute__((unused))
|
|
CHAR8 *
|
|
strncpya(CHAR8 *dest, const CHAR8 *src, unsigned long n)
|
|
{
|
|
unsigned long i;
|
|
|
|
for (i = 0; i < n && src[i] != '\0'; i++)
|
|
dest[i] = src[i];
|
|
for (; i < n; i++)
|
|
dest[i] = '\0';
|
|
|
|
return dest;
|
|
}
|
|
|
|
static inline
|
|
__attribute__((unused))
|
|
CHAR8 *
|
|
strcata(CHAR8 *dest, const CHAR8 *src)
|
|
{
|
|
unsigned long dest_len = strlena(dest);
|
|
unsigned long i;
|
|
|
|
for (i = 0; src[i] != '\0'; i++)
|
|
dest[dest_len + i] = src[i];
|
|
dest[dest_len + i] = '\0';
|
|
|
|
return dest;
|
|
}
|
|
|
|
static inline
|
|
__attribute__((unused))
|
|
CHAR8 *
|
|
strndupa(const CHAR8 * const src, const UINTN srcmax)
|
|
{
|
|
UINTN len;
|
|
CHAR8 *news = NULL;
|
|
|
|
if (!src || !srcmax)
|
|
return news;
|
|
|
|
len = strnlena(src, srcmax);
|
|
news = AllocateZeroPool(len + 1);
|
|
if (news)
|
|
strncpya(news, src, len);
|
|
return news;
|
|
}
|
|
|
|
static inline
|
|
__attribute__((unused))
|
|
CHAR8 *
|
|
translate_slashes(CHAR8 *out, const char *str)
|
|
{
|
|
int i;
|
|
int j;
|
|
if (str == NULL || out == NULL)
|
|
return NULL;
|
|
|
|
for (i = 0, j = 0; str[i] != '\0'; i++, j++) {
|
|
if (str[i] == '\\') {
|
|
out[j] = '/';
|
|
if (str[i+1] == '\\')
|
|
i++;
|
|
} else
|
|
out[j] = str[i];
|
|
}
|
|
out[j] = '\0';
|
|
return out;
|
|
}
|
|
|
|
static inline UNUSED CHAR8 *
|
|
strchrnula(const CHAR8 *s, int c)
|
|
{
|
|
unsigned int i;
|
|
|
|
if (s == NULL)
|
|
return NULL;
|
|
|
|
for (i = 0; s[i] != '\000' && s[i] != c; i++)
|
|
;
|
|
|
|
return (CHAR8 *)&s[i];
|
|
}
|
|
|
|
static inline UNUSED CHAR8 *
|
|
strchra(const CHAR8 *s, int c)
|
|
{
|
|
const CHAR8 *s1;
|
|
|
|
s1 = strchrnula(s, c);
|
|
if (!s1 || s1[0] == '\000')
|
|
return NULL;
|
|
|
|
return (CHAR8 *)s1;
|
|
}
|
|
|
|
#endif /* SHIM_STR_H */
|