1 //==========================================================================
5 // Make a temporary data file for test purposes
7 //==========================================================================
8 //####ECOSGPLCOPYRIGHTBEGIN####
9 // -------------------------------------------
10 // This file is part of eCos, the Embedded Configurable Operating System.
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
13 // eCos is free software; you can redistribute it and/or modify it under
14 // the terms of the GNU General Public License as published by the Free
15 // Software Foundation; either version 2 or (at your option) any later version.
17 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
18 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
19 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
22 // You should have received a copy of the GNU General Public License along
23 // with eCos; if not, write to the Free Software Foundation, Inc.,
24 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
26 // As a special exception, if other files instantiate templates or use macros
27 // or inline functions from this file, or you compile this file and link it
28 // with other works to produce a work based on this file, this file does not
29 // by itself cause the resulting work to be covered by the GNU General Public
30 // License. However the source code for this file must still be made available
31 // in accordance with section (3) of the GNU General Public License.
33 // This exception does not invalidate any other reasons why a work based on
34 // this file might be covered by the GNU General Public License.
36 // -------------------------------------------
37 //####ECOSGPLCOPYRIGHTEND####
38 //####BSDCOPYRIGHTBEGIN####
40 // -------------------------------------------
42 // Portions of this software may have been derived from OpenBSD or other sources,
43 // and are covered by the appropriate copyright disclaimers included herein.
45 // -------------------------------------------
47 //####BSDCOPYRIGHTEND####
48 //==========================================================================
49 //#####DESCRIPTIONBEGIN####
55 //####DESCRIPTIONEND####
57 //==========================================================================
62 int main( int argc, char **argv )
66 unsigned int size, iirandom, z, csum;
69 if ( 3 > argc || 4 < argc) {
71 fprintf( stderr, "usage: %s filename length [seed]\n", argv[0] );
75 f = fopen( argv[1], "rb" );
78 fprintf( stderr, "File %s already exists\n", argv[1] );
82 i = sscanf( argv[2], "%u%1c%1c", &size, &sizec, &scratchc );
83 if ( 0 >= i || 2 < i )
88 case 'G': size *= 1024;
89 case 'M': size *= 1024;
90 case 'k': size *= 1024;
92 case 'b': size *= 512;
100 i = sscanf( argv[3], "%u%1c", &iirandom, &scratchc );
101 if ( 0 >= i || 1 < i )
105 f = fopen( argv[1], "wb" );
107 perror( "fopen [create]" );
112 iirandom += 0x23164920; // What date said
114 if ( size > 4 ) i = size-4; else i = size;
116 for ( /* i */ ; i > 0; i-- ) {
117 iirandom = iirandom * 91 + 137;
118 iirandom ^= iirandom >> 14 | iirandom << 7;
119 z = (i ^ iirandom) & 0xff;
120 // Keep a simple checksum in case we make some trick to check it in
121 // the pretend filesystem.
123 csum = (csum >> (z & 31)) ^ (csum << (32 - (z & 31)));
124 if ( 0 > putc( z, f ) ) {
130 // And bung the checksum on the end.
131 for ( i = 4 ; i < size && i > 0; i-- ) {
134 if ( 0 > putc( z, f ) ) {