Bring up to date with 1.4.4 (belatedly)
[mknbi.git] / string.c
1 #include        "stddef.h"
2 #include        "string.h"
3
4 /*
5  *      Some helper string functions
6  */
7
8 /*
9  *      Same as Posix strrchr
10  */
11 char *strrchr(const char *s, int c)
12 {
13         const char *p;
14
15         for (p = 0 ; *s != '\0'; s++) {
16                 if (*s == c)
17                         p = s;          /* remember it */
18         }
19         return ((char *)p);             /* suppress const loss warning */
20 }
21
22 /*
23  *      Same as Posix strcpy
24  */
25 char *strcpy(char *dest, const char *src)
26 {
27         char *d = dest;
28
29         while ((*d++ = *src++) != '\0')
30                 ;
31         return (dest);
32 }
33
34 /*
35  *      Same as Posix strcat
36  */
37 char *strcat(char *dest, const char *src)
38 {
39         char *d = dest;
40
41         while (*d != '\0')              /* find the end of dest str */
42                 d++;
43         while ((*d = *src++) != '\0')   /* copy src string to dest str */
44                 d++;
45         return (dest);
46 }
47
48 char *strncat(char *dest, const char *src, unsigned int maxlen)
49 {
50         char *d = dest;
51
52         while (*d != '\0')      /* find the end of dest str */
53                 d++;
54         /* copy src string to dest str, until done or maxlen */
55         while (((*d = *src++) != '\0') && (maxlen--))
56                 d++;
57         *d = 0;
58         return (dest);
59 }
60
61 #ifndef __HAVE_ARCH_MEMCMP
62 int memcmp(const void *s1, const void *s2, int n)
63 {
64         int i;
65         const unsigned char *src1 = s1, *src2 = s2;
66         for(i = 0; i < n ; i++) {
67                 if (src1[i] != src2[i]) {
68                         return src1[i] - src2[i];
69                 }
70         }
71         return 0;
72 }
73 #endif