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
Second Extended Filesystem (ext2) and other improvements (#33)
[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 86032d91ec03dbceab54e2e3ecc5bb14258c19c8..4002d5b5e546acb788e26847e4122aa5a7a87467 100644
(file)
--- a/
lunaix-os/libs/klibc/string/strcpy.c
+++ b/
lunaix-os/libs/klibc/string/strcpy.c
@@
-1,6
+1,7
@@
#include <klibc/string.h>
#include <klibc/string.h>
+#include <lunaix/compiler.h>
-char*
+char*
weak
strcpy(char* dest, const char* src)
{
char c;
strcpy(char* dest, const char* src)
{
char c;
@@
-13,14
+14,31
@@
strcpy(char* dest, const char* src)
return &dest[i];
}
return &dest[i];
}
-char*
+/**
+ * @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