git://scm.lunaixsky.com
/
lunaix-os.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
rewrite the device subsystem interfaces (#48)
[lunaix-os.git]
/
lunaix-os
/
libs
/
klibc
/
string
/
strcpy.c
diff --git
a/lunaix-os/libs/klibc/string/strcpy.c
b/lunaix-os/libs/klibc/string/strcpy.c
index 04c85c9784db0f4ccbab8e8d6c27c19a8c4bd1b7..7a3b430faad8a4cc673073ee752b7de6f099691c 100644
(file)
--- a/
lunaix-os/libs/klibc/string/strcpy.c
+++ b/
lunaix-os/libs/klibc/string/strcpy.c
@@
-1,7
+1,7
@@
#include <klibc/string.h>
#include <lunaix/compiler.h>
#include <klibc/string.h>
#include <lunaix/compiler.h>
-char* weak
+char*
_
weak
strcpy(char* dest, const char* src)
{
char c;
strcpy(char* dest, const char* src)
{
char c;
@@
-14,14
+14,31
@@
strcpy(char* dest, const char* src)
return &dest[i];
}
return &dest[i];
}
-char* weak
+/**
+ * @brief strcpy with constrain on numbers of character.
+ * this version is smarter than stdc, it will automatically
+ * handle the null-terminator.
+ *
+ * @param dest
+ * @param src
+ * @param n
+ * @return char*
+ */
+char* _weak
strncpy(char* dest, const char* src, unsigned long n)
{
char c;
unsigned int i = 0;
strncpy(char* dest, const char* src, unsigned long n)
{
char c;
unsigned int i = 0;
- while (
(c = src[i]) && i <= n
)
+ while (
i <= n && (c = src[i])
)
dest[i++] = c;
dest[i++] = c;
- while (i <= n)
- dest[i++] = 0;
+
+ if (!(n < i && src[i - 1])) {
+ while (i <= n)
+ dest[i++] = 0;
+ }
+ else {
+ dest[i - 1] = 0;
+ }
+
return dest;
}
\ No newline at end of file
return dest;
}
\ No newline at end of file