--- bin/megatron/macbin.c.orig Sun Sep 27 01:15:08 1998 +++ bin/megatron/macbin.c Thu Nov 11 17:16:22 1999 @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include #include @@ -30,22 +30,24 @@ */ #define HEADBUFSIZ 128 -u_short updcrc(); +u_int16_t updcrc(); char *mtoupath(); +int test_header(); +int bin_header_read(), bin_header_write(); /* Both input and output routines use this struct and the following globals; therefore this module can only be used for one of the two functions at a time. */ struct bin_file_data { - long forklen[ NUMFORKS ]; + int32_t forklen[ NUMFORKS ]; char path[ MAXPATHLEN ]; int filed; - u_short headercrc; + u_int16_t headercrc; } bin; extern char *forkname[]; -u_char head_buf[HEADBUFSIZ]; +u_int8_t head_buf[HEADBUFSIZ]; /* * bin_open must be called first. pass it a filename that is supposed @@ -53,6 +55,7 @@ * somewhat initialized; bin_filed is set. */ +int bin_open( binfile, flags, fh ) char *binfile; int flags; @@ -113,6 +116,7 @@ * Otherwise, a value of -1 is returned. */ +int bin_close( keepflag ) int keepflag; { @@ -138,6 +142,7 @@ * return zero and no more than that. */ +int bin_read( fork, buffer, length ) int fork; char *buffer; @@ -209,6 +214,7 @@ * bin_write */ +int bin_write( fork, buffer, length ) int fork; char *buffer; @@ -218,7 +224,7 @@ int writelen; int cc = 0; off_t pos; - u_char padchar = 0; + u_int8_t padchar = 0; #if DEBUG >= 3 fprintf( stderr, "bin_write: fork is %s\n", forkname[ fork ] ); @@ -292,11 +298,12 @@ * of the bytes of the other two forks can be read, as well. */ +int bin_header_read( fh, revision ) struct FHeader *fh; int revision; { - u_short mask; + u_int16_t mask; /* * Set the appropriate finder flags mask for the type of macbinary @@ -308,8 +315,8 @@ switch ( revision ) { case 2 : mask = htons( 0xfcee ); - bcopy( (char *)&head_buf[ 101 ], - ((char *)&fh->finder_info.fdFlags) + 1, 1 ); + memcpy( ((char *)&fh->finder_info.fdFlags) + 1, + (char *)&head_buf[ 101 ], 1 ); break; case 1 : mask = htons( 0xfc00 ); @@ -324,18 +331,18 @@ * MacBinary header into the fh struct. What fun! */ - bcopy( (char *)&head_buf[ 2 ], (char *)fh->name, head_buf[ 1 ] ); - bcopy( (char *)&head_buf[ 91 ], (char *)&fh->create_date, 4 ); - bcopy( (char *)&head_buf[ 95 ], (char *)&fh->mod_date, 4 ); + memcpy( (char *)fh->name, (char *)&head_buf[ 2 ], head_buf[ 1 ] ); + memcpy( (char *)&fh->create_date, (char *)&head_buf[ 91 ], 4 ); + memcpy( (char *)&fh->mod_date, (char *)&head_buf[ 95 ], 4 ); fh->backup_date = 0; - bcopy( (char *)&head_buf[ 65 ], (char *)&fh->finder_info, 8 ); - bcopy( (char *)&head_buf[ 73 ], (char *)&fh->finder_info.fdFlags, 1 ); + memcpy( (char *)&fh->finder_info, (char *)&head_buf[ 65 ], 8 ); + memcpy( (char *)&fh->finder_info.fdFlags, (char *)&head_buf[ 73 ], 1 ); fh->finder_info.fdFlags = fh->finder_info.fdFlags & mask; - bcopy( (char *)&head_buf[ 75 ], (char *)&fh->finder_info.fdLocation, 4 ); - bcopy( (char *)&head_buf[ 79 ], (char *)&fh->finder_info.fdFldr, 2 ); - bcopy( (char *)&head_buf[ 83 ], (char *)&fh->forklen[ DATA ], 4 ); + memcpy( (char *)&fh->finder_info.fdLocation, (char *)&head_buf[ 75 ], 4 ); + memcpy( (char *)&fh->finder_info.fdFldr, (char *)&head_buf[ 79 ], 2 ); + memcpy( (char *)&fh->forklen[ DATA ], (char *)&head_buf[ 83 ], 4 ); bin.forklen[ DATA ] = ntohl( fh->forklen[ DATA ] ); - bcopy( (char *)&head_buf[ 87 ], (char *)&fh->forklen[ RESOURCE ], 4 ); + memcpy( (char *)&fh->forklen[ RESOURCE ], (char *)&head_buf[ 87 ], 4 ); bin.forklen[ RESOURCE ] = ntohl( fh->forklen[ RESOURCE ] ); fh->comment[0] = '\0'; @@ -352,7 +359,7 @@ fprintf( stderr, "creator\t\t\t%.*s\n", sizeof( fh->finder_info.fdCreator ), &fh->finder_info.fdCreator ); - bcopy( (char *)&fh->finder_info.fdFlags, (char *)&flags, + memcpy( (char *)&flags, (char *)&fh->finder_info.fdFlags, sizeof( flags )); flags = ntohs( flags ); fprintf( stderr, "flags\t\t\t%x\n", flags ); @@ -372,6 +379,7 @@ * bin_header_write and bin_header_read are opposites. */ +int bin_header_write( fh ) struct FHeader *fh; { @@ -379,24 +387,24 @@ int wc; int wr; - bzero( (char *)head_buf, sizeof( head_buf )); - head_buf[ 1 ] = (u_char)strlen( fh->name ); - bcopy( (char *)fh->name, (char *)&head_buf[ 2 ], head_buf[ 1 ] ); - bcopy( (char *)&fh->finder_info, (char *)&head_buf[ 65 ], 8 ); - bcopy( (char *)&fh->finder_info.fdFlags, (char *)&head_buf[ 73 ], 1 ); - bcopy( (char *)&fh->finder_info.fdLocation, (char *)&head_buf[ 75 ], 4 ); - bcopy( (char *)&fh->finder_info.fdFldr, (char *)&head_buf[ 79 ], 2 ); - bcopy( (char *)&fh->forklen[ DATA ], (char *)&head_buf[ 83 ], 4 ); - bcopy( (char *)&fh->forklen[ RESOURCE ], (char *)&head_buf[ 87 ], 4 ); - bcopy( (char *)&fh->create_date, (char *)&head_buf[ 91 ], 4 ); - bcopy( (char *)&fh->mod_date, (char *)&head_buf[ 95 ], 4 ); - bcopy( ((char *)&fh->finder_info.fdFlags) + 1, - (char *)&head_buf[ 101 ], 1 ); + memset( (char *)head_buf, 0, sizeof( head_buf )); + head_buf[ 1 ] = (u_int8_t)strlen( fh->name ); + memcpy( (char *)&head_buf[ 2 ], (char *)fh->name, head_buf[ 1 ] ); + memcpy( (char *)&head_buf[ 65 ], (char *)&fh->finder_info, 8 ); + memcpy( (char *)&head_buf[ 73 ], (char *)&fh->finder_info.fdFlags, 1 ); + memcpy( (char *)&head_buf[ 75 ], (char *)&fh->finder_info.fdLocation, 4 ); + memcpy( (char *)&head_buf[ 79 ], (char *)&fh->finder_info.fdFldr, 2 ); + memcpy( (char *)&head_buf[ 83 ], (char *)&fh->forklen[ DATA ], 4 ); + memcpy( (char *)&head_buf[ 87 ], (char *)&fh->forklen[ RESOURCE ], 4 ); + memcpy( (char *)&head_buf[ 91 ], (char *)&fh->create_date, 4 ); + memcpy( (char *)&head_buf[ 95 ], (char *)&fh->mod_date, 4 ); + memcpy( (char *)&head_buf[ 101 ], ((char *)&fh->finder_info.fdFlags) + 1, + 1 ); head_buf[ 122 ] = 129; head_buf[ 123 ] = 129; - bin.headercrc = htons( updcrc( (u_short) 0, head_buf, 124 )); - bcopy( (char *)&bin.headercrc, (char *)&head_buf[ 124 ], + bin.headercrc = htons( updcrc( (u_int16_t) 0, head_buf, 124 )); + memcpy( (char *)&head_buf[ 124 ], (char *)&bin.headercrc, sizeof( bin.headercrc )); bin.forklen[ DATA ] = ntohl( fh->forklen[ DATA ] ); @@ -444,11 +452,12 @@ * and bytes 101 through 125 are all zero, then the file is a MacBinary. */ +int test_header() { int cc; - u_short header_crc; - u_char namelen; + u_int16_t header_crc; + u_int8_t namelen; #if DEBUG fprintf( stderr, "entering test_header\n" ); @@ -472,8 +481,8 @@ fprintf( stderr, "byte 0 and 74 are both zero\n" ); #endif - bin.headercrc = updcrc( (u_short) 0, head_buf, 124 ); - bcopy( &head_buf[ 124 ], (char *)&header_crc, sizeof( header_crc )); + bin.headercrc = updcrc( (u_int16_t) 0, head_buf, 124 ); + memcpy( (char *)&header_crc, &head_buf[ 124 ], sizeof( header_crc )); header_crc = ntohs( header_crc ); if ( header_crc == bin.headercrc ) { return( 2 ); @@ -486,7 +495,7 @@ if ( head_buf[ 82 ] != 0 ) { return( -1 ); } - bcopy( &head_buf[ 1 ], (char *)&namelen, sizeof( namelen )); + memcpy( (char *)&namelen, &head_buf[ 1 ], sizeof( namelen )); #if DEBUG fprintf( stderr, "name length is %d\n", namelen ); #endif