OSDN Git Service

strncpy追加
authorMochi <master.c.mochi@gmail.com>
Wed, 9 Jan 2019 15:07:44 +0000 (00:07 +0900)
committerMochi <master.c.mochi@gmail.com>
Wed, 9 Jan 2019 15:07:44 +0000 (00:07 +0900)
src/include/string.h
src/libraries/libc/Makefile
src/libraries/libc/string/strncpy.c [new file with mode: 0644]

index 54a37a6..1b5bf10 100644 (file)
@@ -1,14 +1,14 @@
 /******************************************************************************/
 /* src/include/string.h                                                       */
-/*                                                                 2018/11/24 */
-/* Copyright (C) 2016-2017 Mochi                                              */
+/*                                                                 2019/01/09 */
+/* Copyright (C) 2016-2019 Mochi                                              */
 /******************************************************************************/
 #ifndef _STRING_H_
 #define _STRING_H_
 /******************************************************************************/
 /* インクルード                                                               */
 /******************************************************************************/
-/* 共通ヘッダ */
+/* 標準ヘッダ */
 #include <stddef.h>
 
 
@@ -26,6 +26,10 @@ extern void *memset( void   *s,
 extern char *strcpy( char       *s1,
                      const char *s2  );
 
+extern char *strncpy( char       *s1,
+                      const char *s2,
+                      size_t     n    );
+
 extern size_t strlen( const char *s );
 
 
index 6ad992d..900dd25 100644 (file)
@@ -1,7 +1,7 @@
 #******************************************************************************#
 #* src/libraries/libc/Makefile                                                *#
-#*                                                                 2018/12/23 *#
-#* Copyright (C) 2016-2018 Mochi.                                             *#
+#*                                                                 2019/01/09 *#
+#* Copyright (C) 2016-2019 Mochi.                                             *#
 #******************************************************************************#
 #******************************************************************************#
 #* 設定                                                                       *#
 LIB = libc.a
 
 # ソースコード
-SRCS = stdlib/malloc.c \
-       stdlib/free.c   \
-       string/memcpy.c \
-       string/memset.c \
-       string/strcpy.c \
+SRCS = stdlib/malloc.c  \
+       stdlib/free.c    \
+       string/memcpy.c  \
+       string/memset.c  \
+       string/strcpy.c  \
+       string/strncpy.c \
        string/strlen.c
 
 # ビルドディレクトリ
diff --git a/src/libraries/libc/string/strncpy.c b/src/libraries/libc/string/strncpy.c
new file mode 100644 (file)
index 0000000..bfaf92d
--- /dev/null
@@ -0,0 +1,58 @@
+/******************************************************************************/
+/* src/libraries/libc/string/strncpy.c                                        */
+/*                                                                 2019/01/09 */
+/* Copyright (C) 2019 Mochi.                                                  */
+/******************************************************************************/
+/******************************************************************************/
+/* インクルード                                                               */
+/******************************************************************************/
+/* 標準ヘッダ */
+#include <stddef.h>
+
+
+/******************************************************************************/
+/* グローバル関数宣言                                                         */
+/******************************************************************************/
+/******************************************************************************/
+/**
+ * @brief       strncpy
+ * @details     文字列をコピー文字数分またはnull文字までコピーする。
+ *
+ * @param[in]   *s1 コピー先文字列
+ * @param[in]   *s2 コピー元文字列
+ * @param[in]   n   コピー文字数
+ *
+ * @return      コピー先文字列
+ *
+ * @note        文字数にはnull文字も含まれる。文字数内にnull文字がない場合は、
+ *              コピー先文字列にはnull文字は含まれない。
+ */
+/******************************************************************************/
+char *strcpy( char       *s1,
+              const char *s2,
+              size_t     n    )
+{
+    char *pRet;
+
+    /* 初期化 */
+    pRet = s1;
+
+    /* null文字まで繰り返し */
+    while ( ( *s2 != '\0' ) && ( n > 1 ) ) {
+        /* コピー */
+        *s1 = *s2;
+
+        /* アドレス・文字数更新 */
+        s1++;
+        s2++;
+        n--;
+    }
+
+    /* 最終文字コピー */
+    *s1 = *s2;
+
+    return pRet;
+}
+
+
+/******************************************************************************/