added missing upstream files
[tridge/bind9.git] / bin / tests / genrandom.c
1 /*
2  * Copyright (C) 2004, 2005, 2007  Internet Systems Consortium, Inc. ("ISC")
3  * Copyright (C) 2000-2003  Internet Software Consortium.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for any
6  * purpose with or without fee is hereby granted, provided that the above
7  * copyright notice and this permission notice appear in all copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
10  * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11  * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
12  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
14  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15  * PERFORMANCE OF THIS SOFTWARE.
16  */
17
18 /* $Id: genrandom.c,v 1.15 2007/06/19 23:46:59 tbox Exp $ */
19
20 /*! \file */
21 #include <config.h>
22
23 #include <stdio.h>
24 #include <time.h>
25
26 #include <isc/stdlib.h>
27
28 int
29 main(int argc, char **argv) {
30         unsigned int bytes;
31         unsigned int k;
32         char *endp;
33         FILE *fp;
34
35         if (argc != 3) {
36                 printf("usage: genrandom k file\n");
37                 exit(1);
38         }
39         k = strtoul(argv[1], &endp, 10);
40         if (*endp != 0) {
41                 printf("usage: genrandom k file\n");
42                 exit(1);
43         }
44         bytes = k << 10;
45
46         fp = fopen(argv[2], "w");
47         if (fp == NULL) {
48                 printf("failed to open %s\n", argv[2]);
49                 exit(1);
50         }
51
52 #ifndef HAVE_ARC4RANDOM
53         srand(0x12345678);
54 #endif
55         while (bytes > 0) {
56 #ifndef HAVE_ARC4RANDOM
57                 unsigned short int x = (rand() & 0xFFFF);
58 #else
59                 unsigned short int x = (arc4random() & 0xFFFF);
60 #endif
61                 unsigned char c = x & 0xFF;
62                 if (putc(c, fp) == EOF) {
63                         printf("error writing to file\n");
64                         exit(1);
65                 }
66                 c = x >> 8;
67                 if (putc(c, fp) == EOF) {
68                         printf("error writing to file\n");
69                         exit(1);
70                 }
71                 bytes -= 2;
72         }
73         fclose(fp);
74
75         return (0);
76 }