Branch data Line data Source code
1 : : /* utils.c --- Self test utilities.
2 : : * Copyright (C) 2002-2012 Simon Josefsson
3 : : *
4 : : * This file is part of GNU SASL.
5 : : *
6 : : * This program is free software: you can redistribute it and/or modify
7 : : * it under the terms of the GNU General Public License as published by
8 : : * the Free Software Foundation, either version 3 of the License, or
9 : : * (at your option) any later version.
10 : : *
11 : : * This program is distributed in the hope that it will be useful,
12 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 : : * GNU General Public License for more details.
15 : : *
16 : : * You should have received a copy of the GNU General Public License
17 : : * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 : : *
19 : : */
20 : :
21 : : #ifdef HAVE_CONFIG_H
22 : : #include "config.h"
23 : : #endif
24 : :
25 : : #include <stdio.h>
26 : : #include <stdlib.h>
27 : :
28 : : #include "utils.h"
29 : :
30 : : int debug = 1;
31 : : int error_count = 0;
32 : : int break_on_error = 0;
33 : :
34 : : void
35 : 2 : fail (const char *format, ...)
36 : : {
37 : : va_list arg_ptr;
38 : :
39 : 2 : va_start (arg_ptr, format);
40 : 2 : vfprintf (stderr, format, arg_ptr);
41 : 2 : va_end (arg_ptr);
42 : 2 : error_count++;
43 [ - + ]: 2 : if (break_on_error)
44 : 0 : exit (1);
45 : 2 : }
46 : :
47 : : void
48 : 33 : success (const char *format, ...)
49 : : {
50 : : va_list arg_ptr;
51 : :
52 : 33 : va_start (arg_ptr, format);
53 [ + - ]: 33 : if (debug)
54 : 33 : vfprintf (stdout, format, arg_ptr);
55 : 33 : va_end (arg_ptr);
56 : 33 : }
57 : :
58 : : void
59 : 0 : escapeprint (const char *str, size_t len)
60 : : {
61 : : size_t i;
62 : :
63 : 0 : printf (" (length %lu bytes):\n\t", (unsigned long) len);
64 [ # # ]: 0 : for (i = 0; i < len; i++)
65 : : {
66 [ # # ][ # # ]: 0 : if (((str[i] & 0xFF) >= 'A' && (str[i] & 0xFF) <= 'Z') ||
[ # # ]
67 [ # # ][ # # ]: 0 : ((str[i] & 0xFF) >= 'a' && (str[i] & 0xFF) <= 'z') ||
68 [ # # ]: 0 : ((str[i] & 0xFF) >= '0' && (str[i] & 0xFF) <= '9')
69 [ # # ][ # # ]: 0 : || (str[i] & 0xFF) == ' ' || (str[i] & 0xFF) == '.')
70 : 0 : printf ("%c", (str[i] & 0xFF));
71 : : else
72 : 0 : printf ("\\x%02X", (str[i] & 0xFF));
73 [ # # ][ # # ]: 0 : if ((i + 1) % 16 == 0 && (i + 1) < len)
74 : 0 : printf ("'\n\t'");
75 : : }
76 : 0 : printf ("\n");
77 : 0 : }
78 : :
79 : : void
80 : 0 : hexprint (const char *str, size_t len)
81 : : {
82 : : size_t i;
83 : :
84 : 0 : printf ("\t;; ");
85 [ # # ]: 0 : for (i = 0; i < len; i++)
86 : : {
87 : 0 : printf ("%02x ", (str[i] & 0xFF));
88 [ # # ]: 0 : if ((i + 1) % 8 == 0)
89 : 0 : printf (" ");
90 [ # # ][ # # ]: 0 : if ((i + 1) % 16 == 0 && i + 1 < len)
91 : 0 : printf ("\n\t;; ");
92 : : }
93 : 0 : printf ("\n");
94 : 0 : }
95 : :
96 : : void
97 : 0 : binprint (const char *str, size_t len)
98 : : {
99 : : size_t i;
100 : :
101 : 0 : printf ("\t;; ");
102 [ # # ]: 0 : for (i = 0; i < len; i++)
103 : : {
104 : 0 : printf ("%d%d%d%d%d%d%d%d ",
105 : 0 : (str[i] & 0xFF) & 0x80 ? 1 : 0,
106 : 0 : (str[i] & 0xFF) & 0x40 ? 1 : 0,
107 : 0 : (str[i] & 0xFF) & 0x20 ? 1 : 0,
108 : 0 : (str[i] & 0xFF) & 0x10 ? 1 : 0,
109 : 0 : (str[i] & 0xFF) & 0x08 ? 1 : 0,
110 : 0 : (str[i] & 0xFF) & 0x04 ? 1 : 0,
111 : 0 : (str[i] & 0xFF) & 0x02 ? 1 : 0, (str[i] & 0xFF) & 0x01 ? 1 : 0);
112 [ # # ]: 0 : if ((i + 1) % 3 == 0)
113 : 0 : printf (" ");
114 [ # # ][ # # ]: 0 : if ((i + 1) % 6 == 0 && i + 1 < len)
115 : 0 : printf ("\n\t;; ");
116 : : }
117 : 0 : printf ("\n");
118 : 0 : }
119 : :
120 : : int
121 : 20 : main (int argc, char *argv[])
122 : : {
123 : : do
124 [ + - ][ - + ]: 20 : if (strcmp (argv[argc - 1], "-v") == 0 ||
125 : 20 : strcmp (argv[argc - 1], "--verbose") == 0)
126 : 0 : debug = 1;
127 [ + - ][ - + ]: 20 : else if (strcmp (argv[argc - 1], "-b") == 0 ||
128 : 20 : strcmp (argv[argc - 1], "--break-on-error") == 0)
129 : 0 : break_on_error = 1;
130 [ + - ][ + - ]: 20 : else if (strcmp (argv[argc - 1], "-h") == 0 ||
131 [ - + ]: 20 : strcmp (argv[argc - 1], "-?") == 0 ||
132 : 20 : strcmp (argv[argc - 1], "--help") == 0)
133 : : {
134 : 0 : printf ("Usage: %s [-vbh?] [--verbose] [--break-on-error] [--help]\n",
135 : : argv[0]);
136 : 0 : return 1;
137 : : }
138 [ - + ]: 20 : while (argc-- > 1);
139 : :
140 : 20 : doit ();
141 : :
142 [ + - ]: 18 : if (debug)
143 : 18 : printf ("Self test `%s' finished with %d errors\n", argv[0], error_count);
144 : :
145 : 18 : return error_count ? 1 : 0;
146 : : }
|