Subversion Repositories Kolibri OS

Rev

Rev 8687 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. /* String handling <string.h>
  2.  
  3.    This file is part of the Public Domain C Library (PDCLib).
  4.    Permission is granted to use, modify, and / or redistribute at will.
  5. */
  6.  
  7. #ifndef _STRING_H_
  8. #define _STRING_H_
  9.  
  10. #include <stddef.h>
  11.  
  12. #ifdef __cplusplus
  13. extern "C" {
  14. #endif
  15.  
  16. /* String function conventions */
  17.  
  18. /*
  19.    In any of the following functions taking a size_t n to specify the length of
  20.    an array or size of a memory region, n may be 0, but the pointer arguments to
  21.    the call shall still be valid unless otherwise stated.
  22. */
  23.  
  24. /* Copying functions */
  25.  
  26. extern void* _FUNC(memccpy)(void *restrict dest, const void *restrict src, int c, size_t n);
  27.  
  28. /* Copy a number of n characters from the memory area pointed to by s2 to the
  29.    area pointed to by s1. If the two areas overlap, behaviour is undefined.
  30.    Returns the value of s1.
  31. */
  32.  
  33. #ifdef __TINYC__
  34. extern void* memcpy(void* s1, const void* s2, size_t n);
  35. extern void* memset(void* s, int c, size_t n);
  36. extern void* memmove(void* s1, const void* s2, size_t n);
  37. #else
  38. extern void* _FUNC(memcpy)(void* s1, const void* s2, size_t n);
  39. extern void* _FUNC(memset)(void* s, int c, size_t n);
  40. extern void* _FUNC(memmove)(void* s1, const void* s2, size_t n);
  41. #endif
  42.  
  43. /* Copy the character array s2 (including terminating '\0' byte) into the
  44.    character array s1.
  45.    Returns the value of s1.
  46. */
  47. extern char* _FUNC(strcpy)(char*  s1, const char* s2);
  48.  
  49. /* Copy a maximum of n characters from the character array s2 into the character
  50.    array s1. If s2 is shorter than n characters, '\0' bytes will be appended to
  51.    the copy in s1 until n characters have been written. If s2 is longer than n
  52.    characters, NO terminating '\0' will be written to s1. If the arrays overlap,
  53.    behaviour is undefined.
  54.    Returns the value of s1.
  55. */
  56. extern char* _FUNC(strncpy)(char* s1, const char* s2, size_t n);
  57.  
  58. /* Concatenation functions */
  59.  
  60. /* Append the contents of the character array s2 (including terminating '\0') to
  61.    the character array s1 (first character of s2 overwriting the '\0' of s1). If
  62.    the arrays overlap, behaviour is undefined.
  63.    Returns the value of s1.
  64. */
  65. extern char* _FUNC(strcat)(char* s1, const char* s2);
  66.  
  67. /* Append a maximum of n characters from the character array s2 to the character
  68.    array s1 (first character of s2 overwriting the '\0' of s1). A terminating
  69.    '\0' is ALWAYS appended, even if the full n characters have already been
  70.    written. If the arrays overlap, behaviour is undefined.
  71.    Returns the value of s1.
  72. */
  73. extern char* _FUNC(strncat)(char* s1, const char* s2, size_t n);
  74.  
  75. /* Comparison functions */
  76.  
  77. /* Compare the first n characters of the memory areas pointed to by s1 and s2.
  78.    Returns 0 if s1 == s2, a negative number if s1 < s2, and a positive number if
  79.    s1 > s2.
  80. */
  81. extern int _FUNC(memcmp)(const void * s1, const void* s2, size_t n);
  82.  
  83. /* Compare the character arrays s1 and s2.
  84.    Returns 0 if s1 == s2, a negative number if s1 < s2, and a positive number if
  85.    s1 > s2.
  86. */
  87. extern int _FUNC(strcmp)(const char * s1, const char* s2);
  88.  
  89. /* Compare the character arrays s1 and s2, interpreted as specified by the
  90.    LC_COLLATE category of the current locale.
  91.    Returns 0 if s1 == s2, a negative number if s1 < s2, and a positive number if
  92.    s1 > s2.
  93.    TODO: Currently a dummy wrapper for strcmp() as PDCLib does not yet support
  94.    locales.
  95. */
  96. extern int _FUNC(strcoll)(const char* s1, const char* s2);
  97.  
  98. /* Compare no more than the first n characters of the character arrays s1 and
  99.    s2.
  100.    Returns 0 if s1 == s2, a negative number if s1 < s2, and a positive number if
  101.    s1 > s2.
  102. */
  103. extern int _FUNC(strncmp)(const char* s1, const char* s2, size_t n);
  104.  
  105. /* Transform the character array s2 as appropriate for the LC_COLLATE setting of
  106.    the current locale. If length of resulting string is less than n, store it in
  107.    the character array pointed to by s1. Return the length of the resulting
  108.    string.
  109. */
  110. extern size_t _FUNC(strxfrm)(char* s1, const char* s2, size_t n);
  111.  
  112. /* Search functions */
  113.  
  114. /* Search the first n characters in the memory area pointed to by s for the
  115.    character c (interpreted as unsigned char).
  116.    Returns a pointer to the first instance found, or NULL.
  117. */
  118. extern void* _FUNC(memchr)(const void* s, int c, size_t n);
  119.  
  120. /* Search the character array s (including terminating '\0') for the character c
  121.    (interpreted as char).
  122.    Returns a pointer to the first instance found, or NULL.
  123. */
  124. extern char* _FUNC(strchr)(const char* s, int c);
  125.  
  126. /* Determine the length of the initial substring of character array s1 which
  127.    consists only of characters not from the character array s2.
  128.    Returns the length of that substring.
  129. */
  130. extern size_t _FUNC(strcspn)(const char* s1, const char* s2);
  131.  
  132. /* Search the character array s1 for any character from the character array s2.
  133.    Returns a pointer to the first occurrence, or NULL.
  134. */
  135. extern char* _FUNC(strpbrk)(const char* s1, const char* s2);
  136.  
  137. /* Search the character array s (including terminating '\0') for the character c
  138.    (interpreted as char).
  139.    Returns a pointer to the last instance found, or NULL.
  140. */
  141. extern char* _FUNC(strrchr)(const char * s, int c );
  142.  
  143. /* Determine the length of the initial substring of character array s1 which
  144.    consists only of characters from the character array s2.
  145.    Returns the length of that substring.
  146. */
  147. extern size_t _FUNC(strspn)(const char * s1, const char * s2);
  148.  
  149. /* Search the character array s1 for the substring in character array s2.
  150.    Returns a pointer to that sbstring, or NULL. If s2 is of length zero,
  151.    returns s1.
  152. */
  153. extern char* _FUNC(strstr)(const char * s1, const char * s2);
  154.  
  155. /* In a series of subsequent calls, parse a C string into tokens.
  156.    On the first call to strtok(), the first argument is a pointer to the to-be-
  157.    parsed C string. On subsequent calls, the first argument is NULL unless you
  158.    want to start parsing a new string. s2 holds an array of separator characters
  159.    which can differ from call to call. Leading separators are skipped, the first
  160.    trailing separator overwritten with '\0'.
  161.    Returns a pointer to the next token.
  162.    WARNING: This function uses static storage, and as such is not reentrant.
  163. */
  164. extern char* _FUNC(strtok)(char* s1, const char* s2);
  165.  
  166. /* Map an error number to a (locale-specific) error message string. Error
  167.    numbers are typically errno values, but any number is mapped to a message.
  168.    TODO: PDCLib does not yet support locales.
  169. */
  170. extern char*  _FUNC(strerror)(int errnum);
  171.  
  172. /* Returns the length of the string s (excluding terminating '\0').*/
  173. extern size_t _FUNC(strlen)(const char * s);
  174.  
  175. /* The function reverses the sequence of characters in the string pointed to by str. */
  176. extern char* _FUNC(strrev)(char *str);
  177.  
  178. /* The strdup function executes the function pointed to by the str argument. */
  179. extern char* _FUNC(strdup)(const char *str);
  180.  
  181. #endif
  182.