e96d4466f77ebeb7aaca833cf4a2cc3cc0687312
[olsrd.git] / src / common / string.c
1
2 /*
3  * The olsr.org Optimized Link-State Routing daemon(olsrd)
4  * Copyright (c) 2008, Bernd Petrovitsch <bernd-at-firmix.at>
5  * Copyright (c) 2008, Sven-Ola Tuecke <sven-ola-at-gmx.de>
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  * * Redistributions of source code must retain the above copyright
13  *   notice, this list of conditions and the following disclaimer.
14  * * Redistributions in binary form must reproduce the above copyright
15  *   notice, this list of conditions and the following disclaimer in
16  *   the documentation and/or other materials provided with the
17  *   distribution.
18  * * Neither the name of olsr.org, olsrd nor the names of its
19  *   contributors may be used to endorse or promote products derived
20  *   from this software without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33  * POSSIBILITY OF SUCH DAMAGE.
34  *
35  * Visit http://www.olsr.org for more information.
36  *
37  * If you find this software useful feel free to make a donation
38  * to the project. For more information see the website or contact
39  * the copyright holders.
40  *
41  */
42
43 #include "common/string.h"
44
45 #include <string.h>
46 #include <assert.h>
47
48 const char *OLSR_YES = "yes";
49 const char *OLSR_NO = "no";
50
51 /*
52  * A somewhat safe version of strncpy and strncat. Note, that
53  * BSD/Solaris strlcpy()/strlcat() differ in implementation, while
54  * the BSD compiler prints out a warning if you use plain strcpy().
55  */
56 char *
57 strscpy(char *dest, const char *src, size_t size)
58 {
59   size_t l = 0;
60   assert(dest != NULL);
61   assert(src != NULL);
62   if (NULL != dest && NULL != src) {
63     /* src does not need to be null terminated */
64     if (0 < size--) {
65       while (l < size && 0 != src[l])
66         l++;
67     }
68     dest[l] = 0;
69   }
70   return strncpy(dest, src, l);
71 }
72
73 /*
74  * A somewhat safe version of strncat. Note, that the
75  * size parameter denotes the complete size of dest,
76  * which is different from the strncat semantics.
77  */
78 char *
79 strscat(char *dest, const char *src, size_t size)
80 {
81   const size_t l = strlen(dest);
82   return strscpy(dest + l, src, size > l ? size - l : 0);
83 }
84
85 /*
86  * Local Variables:
87  * c-basic-offset: 2
88  * indent-tabs-mode: nil
89  * End:
90  */