PatchworkOS
Loading...
Searching...
No Matches
strncpy_s.c
Go to the documentation of this file.
2#include <errno.h>
3#include <stdint.h>
4#include <stdlib.h>
5#include <string.h>
6
8
9errno_t strncpy_s(char* _RESTRICT s1, rsize_t s1max, const char* _RESTRICT s2, rsize_t n)
10{
11 char* dest = s1;
12 const char* src = s2;
13
14 if (s1 != NULL && s2 != NULL && s1max <= RSIZE_MAX && n <= RSIZE_MAX && s1max != 0)
15 {
16 while (s1max--)
17 {
18 if (dest == s2 || src == s1)
19 {
20 goto runtime_constraint_violation;
21 }
22
23 if (n-- == 0 || (*dest++ = *src++) == '\0')
24 {
25 return 0;
26 }
27 }
28 }
29
30runtime_constraint_violation:
31
32 if (s1 != NULL && s1max > 0 && s1max <= RSIZE_MAX)
33 {
34 s1[0] = '\0';
35 }
36
38 return EINVAL;
39}
constraint_handler_t _constraintHandler
#define _CONSTRAINT_VIOLATION(e)
int errno_t
Definition errno_t.h:4
#define EINVAL
Invalid argument.
Definition errno.h:142
#define NULL
Pointer error value.
Definition NULL.h:23
#define _RESTRICT
Definition config.h:17
__SIZE_TYPE__ rsize_t
Definition rsize_t.h:4
errno_t strncpy_s(char *_RESTRICT s1, rsize_t s1max, const char *_RESTRICT s2, rsize_t n)
Definition strncpy_s.c:9