File: strlcpy.c

package info (click to toggle)
valgrind 1%3A3.24.0-3
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 176,332 kB
  • sloc: ansic: 795,029; exp: 26,134; xml: 23,472; asm: 14,393; cpp: 9,397; makefile: 7,464; sh: 6,122; perl: 5,446; python: 1,498; javascript: 981; awk: 166; csh: 1
file content (47 lines) | stat: -rw-r--r-- 1,230 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/* Tests for some interesting cases in non-standard strlcpy(). */

#include <stdio.h>
#include <stdlib.h>
#include <strings.h>

int main(void)
{
   size_t copied;

   char *src = malloc(100);
   if (src == NULL) {
      fprintf(stderr, "Memory allocation failure.\n");
      return 1;
   }
   strcpy(src, "Hey, dude!");

   char *dst = malloc(10);
   if (dst == NULL) {
      fprintf(stderr, "Memory allocation failure.\n");
      return 1;
   }

   /* This is ok. */
   copied = strlcpy(dst, src, 10);
   if (copied != 10)
      fprintf(stderr, "Expected 10 but got %zu for test #1.\n", copied);

   /* Here dst is not large enough. */
   copied = strlcpy(dst, src, strlen(src) + 1);
   if (copied != 10)
      fprintf(stderr, "Expected 10 but got %zu for test #2.\n", copied);

   /* This is just a fancy way how to write strlen(src).
      Undocumented but heavily used. */
   copied = strlcpy(NULL, src, 0);
   if (copied != 10)
      fprintf(stderr, "Expected 10 but got %zu for test #3.\n", copied);

   /* Source and destination overlap. */
   strlcpy(src + 9, src, strlen(src) + 1);
   /* Return value is not checked because function behaviour
      is undefined in such case (and valgrind's differs). */

   return 0;
}