/******************************************************************************/
/* 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>
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 );
#******************************************************************************#
#* 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
# ビルドディレクトリ
--- /dev/null
+/******************************************************************************/
+/* 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;
+}
+
+
+/******************************************************************************/