• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/ap/gpl/timemachine/gettext-0.17/gettext-tools/gnulib-tests/
1/* Test of vasnprintf() and asnprintf() functions.
2   Copyright (C) 2007 Free Software Foundation, Inc.
3
4   This program is free software: you can redistribute it and/or modify
5   it under the terms of the GNU General Public License as published by
6   the Free Software Foundation; either version 3 of the License, or
7   (at your option) any later version.
8
9   This program is distributed in the hope that it will be useful,
10   but WITHOUT ANY WARRANTY; without even the implied warranty of
11   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12   GNU General Public License for more details.
13
14   You should have received a copy of the GNU General Public License
15   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
16
17/* Written by Bruno Haible <bruno@clisp.org>, 2007.  */
18
19#include <config.h>
20
21#include "vasnprintf.h"
22
23#include <stdarg.h>
24#include <stdio.h>
25#include <stdlib.h>
26#include <string.h>
27
28#define ASSERT(expr) \
29  do									     \
30    {									     \
31      if (!(expr))							     \
32        {								     \
33          fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \
34          abort ();							     \
35        }								     \
36    }									     \
37  while (0)
38
39static char *
40my_asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...)
41{
42  va_list args;
43  char *ret;
44
45  va_start (args, format);
46  ret = vasnprintf (resultbuf, lengthp, format, args);
47  va_end (args);
48  return ret;
49}
50
51static void
52test_vasnprintf ()
53{
54  char buf[8];
55  int size;
56
57  for (size = 0; size <= 8; size++)
58    {
59      size_t length = size;
60      char *result = my_asnprintf (NULL, &length, "%d", 12345);
61      ASSERT (result != NULL);
62      ASSERT (strcmp (result, "12345") == 0);
63      ASSERT (length == 5);
64      free (result);
65    }
66
67  for (size = 0; size <= 8; size++)
68    {
69      size_t length;
70      char *result;
71
72      memcpy (buf, "DEADBEEF", 8);
73      length = size;
74      result = my_asnprintf (buf, &length, "%d", 12345);
75      ASSERT (result != NULL);
76      ASSERT (strcmp (result, "12345") == 0);
77      ASSERT (length == 5);
78      if (size < 6)
79	ASSERT (result != buf);
80      ASSERT (memcmp (buf + size, "DEADBEEF" + size, 8 - size) == 0);
81      if (result != buf)
82	free (result);
83    }
84}
85
86static void
87test_asnprintf ()
88{
89  char buf[8];
90  int size;
91
92  for (size = 0; size <= 8; size++)
93    {
94      size_t length = size;
95      char *result = asnprintf (NULL, &length, "%d", 12345);
96      ASSERT (result != NULL);
97      ASSERT (strcmp (result, "12345") == 0);
98      ASSERT (length == 5);
99      free (result);
100    }
101
102  for (size = 0; size <= 8; size++)
103    {
104      size_t length;
105      char *result;
106
107      memcpy (buf, "DEADBEEF", 8);
108      length = size;
109      result = asnprintf (buf, &length, "%d", 12345);
110      ASSERT (result != NULL);
111      ASSERT (strcmp (result, "12345") == 0);
112      ASSERT (length == 5);
113      if (size < 6)
114	ASSERT (result != buf);
115      ASSERT (memcmp (buf + size, "DEADBEEF" + size, 8 - size) == 0);
116      if (result != buf)
117	free (result);
118    }
119}
120
121int
122main (int argc, char *argv[])
123{
124  test_vasnprintf ();
125  test_asnprintf ();
126  return 0;
127}
128