blob: d164f32b83ccb9b2f2d0d1812209c57c364da7ea [file] [log] [blame]
Eric Biederman8ca8d762003-04-22 19:02:15 +00001#ifndef STRING_H
2#define STRING_H
3
4#include <stddef.h>
Greg Watson16247822004-03-13 03:34:52 +00005#include <stdlib.h>
6
David Hendricks6053a9c2018-01-28 18:01:10 -08007#if !defined(__ROMCC__)
8#include <console/vtxprintf.h>
9#endif
10
Aaron Durbinac4b00e2013-04-26 11:58:35 -050011/* Stringify a token */
12#ifndef STRINGIFY
13#define _STRINGIFY(x) #x
14#define STRINGIFY(x) _STRINGIFY(x)
15#endif
16
Stefan Reinauera91e0fe2008-08-01 11:39:35 +000017void *memcpy(void *dest, const void *src, size_t n);
18void *memmove(void *dest, const void *src, size_t n);
19void *memset(void *s, int c, size_t n);
20int memcmp(const void *s1, const void *s2, size_t n);
Gabe Black1025f3a2011-09-16 02:18:56 -070021void *memchr(const void *s, int c, size_t n);
Aaron Durbin5577a472016-11-08 09:42:13 -060022#if !defined(__ROMCC__)
Lee Leahy6d71a432017-03-07 15:24:16 -080023int snprintf(char *buf, size_t size, const char *fmt, ...);
David Hendricks6053a9c2018-01-28 18:01:10 -080024int vsnprintf(char *buf, size_t size, const char *fmt, va_list args);
Stefan Reinauer6bd571e2009-09-25 21:59:57 +000025#endif
Thomas Heijligen92043552019-01-29 12:48:01 +010026char *strdup(const char *s);
27char *strconcat(const char *s1, const char *s2);
Julius Wernera66c9b82019-05-20 14:53:47 -070028size_t strnlen(const char *src, size_t max);
29size_t strlen(const char *src);
30char *strchr(const char *s, int c);
31char *strncpy(char *to, const char *from, int count);
32char *strcpy(char *dst, const char *src);
33int strcmp(const char *s1, const char *s2);
34int strncmp(const char *s1, const char *s2, int maxlen);
Eric Biederman8ca8d762003-04-22 19:02:15 +000035
Patrick Rudolph03c7b052018-03-29 10:05:34 +020036/**
37 * Find a character in a string.
38 *
39 * @param s The string.
40 * @param c The character.
41 * @return A pointer to the last occurrence of the character in the
42 * string, or NULL if the character was not encountered within the string.
43 */
Julius Wernera66c9b82019-05-20 14:53:47 -070044char *strrchr(const char *s, int c);
Patrick Rudolph03c7b052018-03-29 10:05:34 +020045
Julius Wernera66c9b82019-05-20 14:53:47 -070046/*
47 * Parses an unsigned integer and moves the input pointer forward to the first
48 * character that's not a valid digit. s and *s must not be NULL. Result
49 * undefined if it overruns the return type size.
50 */
51unsigned int skip_atoi(char **s);
Stefan Reinauer36c83402009-03-01 10:16:01 +000052
Greg Watson16247822004-03-13 03:34:52 +000053static inline int isspace(int c)
54{
55 switch (c) {
56 case ' ': case '\f': case '\n':
57 case '\r': case '\t': case '\v':
58 return 1;
59 default:
60 return 0;
61 }
62}
63
Nico Huberf5b346c2017-11-01 13:21:40 +010064static inline int isprint(int c)
65{
66 return c >= ' ' && c <= '~';
67}
68
Greg Watson16247822004-03-13 03:34:52 +000069static inline int isdigit(int c)
70{
71 return (c >= '0' && c <= '9');
72}
73
74static inline int isxdigit(int c)
75{
76 return ((c >= '0' && c <= '9') ||
77 (c >= 'a' && c <= 'f') ||
78 (c >= 'A' && c <= 'F'));
79}
80
Greg Watsonf6d05f52004-03-17 17:02:28 +000081static inline int isupper(int c)
82{
83 return (c >= 'A' && c <= 'Z');
84}
85
Greg Watson16247822004-03-13 03:34:52 +000086static inline int islower(int c)
87{
88 return (c >= 'a' && c <= 'z');
89}
90
91static inline int toupper(int c)
92{
Elyes HAOUAS8ffd0502016-09-01 19:01:41 +020093 if (islower(c))
94 c -= 'a'-'A';
95 return c;
Greg Watson16247822004-03-13 03:34:52 +000096}
Greg Watsonf6d05f52004-03-17 17:02:28 +000097
98static inline int tolower(int c)
99{
Elyes HAOUAS8ffd0502016-09-01 19:01:41 +0200100 if (isupper(c))
101 c -= 'A'-'a';
102 return c;
Greg Watsonf6d05f52004-03-17 17:02:28 +0000103}
Julius Werner66c77c22019-05-13 17:45:27 -0700104
Eric Biederman8ca8d762003-04-22 19:02:15 +0000105#endif /* STRING_H */