Tizen 2.0 Release
[external/libgnutls26.git] / lib / minitasn1 / gstr.c
1 /*
2  * Copyright (C) 2002-2012 Free Software Foundation, Inc.
3  *
4  * This file is part of LIBTASN1.
5  *
6  * The LIBTASN1 library is free software; you can redistribute it
7  * and/or modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19  * 02110-1301, USA
20  */
21
22 #include <int.h>
23 #include "gstr.h"
24
25 /* These function are like strcat, strcpy. They only
26  * do bounds checking (they shouldn't cause buffer overruns),
27  * and they always produce null terminated strings.
28  *
29  * They should be used only with null terminated strings.
30  */
31 void
32 _asn1_str_cat (char *dest, size_t dest_tot_size, const char *src)
33 {
34   size_t str_size = strlen (src);
35   size_t dest_size = strlen (dest);
36
37   if (dest_tot_size - dest_size > str_size)
38     {
39       strcat (dest, src);
40     }
41   else
42     {
43       if (dest_tot_size - dest_size > 0)
44         {
45           strncat (dest, src, (dest_tot_size - dest_size) - 1);
46           dest[dest_tot_size - 1] = 0;
47         }
48     }
49 }
50
51 void
52 _asn1_str_cpy (char *dest, size_t dest_tot_size, const char *src)
53 {
54   size_t str_size = strlen (src);
55
56   if (dest_tot_size > str_size)
57     {
58       strcpy (dest, src);
59     }
60   else
61     {
62       if (dest_tot_size > 0)
63         {
64           strncpy (dest, src, (dest_tot_size) - 1);
65           dest[dest_tot_size - 1] = 0;
66         }
67     }
68 }