Rev 5270 | Rev 6934 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1966 | serge | 1 | /* |
2 | * linux/lib/string.c |
||
3 | * |
||
4 | * Copyright (C) 1991, 1992 Linus Torvalds |
||
5 | */ |
||
6 | |||
7 | /* |
||
8 | * stupid library routines.. The optimized versions should generally be found |
||
9 | * as inline code in |
||
10 | * |
||
11 | * These are buggy as well.. |
||
12 | * |
||
13 | * * Fri Jun 25 1999, Ingo Oeser |
||
14 | * - Added strsep() which will replace strtok() soon (because strsep() is |
||
15 | * reentrant and should be faster). Use only strsep() in new code, please. |
||
16 | * |
||
17 | * * Sat Feb 09 2002, Jason Thomas |
||
18 | * Matthew Hawkins |
||
19 | * - Kissed strtok() goodbye |
||
20 | */ |
||
21 | |||
22 | #include |
||
23 | #include |
||
24 | #include |
||
25 | #include |
||
26 | |||
27 | |||
28 | #ifndef __HAVE_ARCH_STRLCPY |
||
29 | /** |
||
5270 | serge | 30 | * strlcpy - Copy a C-string into a sized buffer |
1966 | serge | 31 | * @dest: Where to copy the string to |
32 | * @src: Where to copy the string from |
||
33 | * @size: size of destination buffer |
||
34 | * |
||
35 | * Compatible with *BSD: the result is always a valid |
||
36 | * NUL-terminated string that fits in the buffer (unless, |
||
37 | * of course, the buffer size is zero). It does not pad |
||
38 | * out the result like strncpy() does. |
||
39 | */ |
||
40 | size_t strlcpy(char *dest, const char *src, size_t size) |
||
41 | { |
||
42 | size_t ret = strlen(src); |
||
43 | |||
44 | if (size) { |
||
45 | size_t len = (ret >= size) ? size - 1 : ret; |
||
46 | memcpy(dest, src, len); |
||
47 | dest[len] = '\0'; |
||
48 | } |
||
49 | return ret; |
||
50 | } |
||
6102 | serge | 51 | |
52 | #ifndef __HAVE_ARCH_STRLCAT |
||
53 | /** |
||
54 | * strlcat - Append a length-limited, C-string to another |
||
55 | * @dest: The string to be appended to |
||
56 | * @src: The string to append to it |
||
57 | * @count: The size of the destination buffer. |
||
58 | */ |
||
59 | size_t strlcat(char *dest, const char *src, size_t count) |
||
60 | { |
||
61 | size_t dsize = strlen(dest); |
||
62 | size_t len = strlen(src); |
||
63 | size_t res = dsize + len; |
||
64 | |||
65 | /* This would be a bug */ |
||
66 | BUG_ON(dsize >= count); |
||
67 | |||
68 | dest += dsize; |
||
69 | count -= dsize; |
||
70 | if (len >= count) |
||
71 | len = count-1; |
||
72 | memcpy(dest, src, len); |
||
73 | dest[len] = 0; |
||
74 | return res; |
||
75 | } |
||
1966 | serge | 76 | #endif |
77 | |||
6102 | serge | 78 | |
79 | #endif |
||
80 |