2 * Copyright (C) 2018 Red Hat Inc.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
15 * * Neither the name of Red Hat nor the names of its contributors may be
16 * used to endorse or promote products derived from this software without
17 * specific prior written permission.
19 * THIS SOFTWARE IS PROVIDED BY RED HAT AND CONTRIBUTORS ''AS IS'' AND
20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
22 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL RED HAT OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
26 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
27 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
29 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
41 static bool error_flagged
;
43 /* Stub for linking against minimal source files, and for proving that
44 * an error message is issued when expected. */
46 nbdkit_error (const char *fs
, ...)
52 test_nbdkit_parse_size (void)
67 /* Strings leading to overflow */
68 { "9223372036854775808", -1 }, /* INT_MAX + 1 */
69 { "18446744073709551614", -1 }, /* UINT64_MAX - 1 */
70 { "18446744073709551615", -1 }, /* UINT64_MAX */
71 { "18446744073709551616", -1 }, /* UINT64_MAX + 1 */
72 { "999999999999999999999999", -1 },
74 /* Strings representing negative values */
77 { "-9223372036854775809", -1 }, /* INT64_MIN - 1 */
78 { "-9223372036854775808", -1 }, /* INT64_MIN */
79 { "-9223372036854775807", -1 }, /* INT64_MIN + 1 */
80 { "-18446744073709551616", -1 }, /* -UINT64_MAX - 1 */
81 { "-18446744073709551615", -1 }, /* -UINT64_MAX */
82 { "-18446744073709551614", -1 }, /* -UINT64_MAX + 1 */
84 /* Strings we may want to support in the future */
97 { "1234567890", 1234567890 },
98 { "+1234567890", 1234567890 },
99 { "9223372036854775807", INT64_MAX
},
106 { "1m", 1024 * 1024 },
107 { "1M", 1024 * 1024 },
108 { "+1M", 1024 * 1024 },
109 { "1g", 1024 * 1024 * 1024 },
110 { "1G", 1024 * 1024 * 1024 },
111 { "1t", 1024LL * 1024 * 1024 * 1024 },
112 { "1T", 1024LL * 1024 * 1024 * 1024 },
113 { "1p", 1024LL * 1024 * 1024 * 1024 * 1024 },
114 { "1P", 1024LL * 1024 * 1024 * 1024 * 1024 },
115 { "8191p", 1024LL * 1024 * 1024 * 1024 * 1024 * 8191 },
116 { "1e", 1024LL * 1024 * 1024 * 1024 * 1024 * 1024 },
117 { "1E", 1024LL * 1024 * 1024 * 1024 * 1024 * 1024 },
120 for (size_t i
= 0; i
< sizeof pairs
/ sizeof pairs
[0]; i
++) {
123 error_flagged
= false;
124 r
= nbdkit_parse_size (pairs
[i
].str
);
125 if (r
!= pairs
[i
].res
) {
127 "Wrong parse for %s, got %" PRId64
", expected %" PRId64
"\n",
128 pairs
[i
].str
, r
, pairs
[i
].res
);
131 if ((r
== -1) != error_flagged
) {
132 fprintf (stderr
, "Wrong error message handling for %s\n", pairs
[i
].str
);
141 main (int argc
, char *argv
[])
144 pass
&= test_nbdkit_parse_size ();
145 /* XXX add tests for nbdkit_absolute_path, nbdkit_read_password */