X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=netatalk.git;a=blobdiff_plain;f=bin%2Fmegatron%2Fhqx.c;h=117c9dd65d08b0726ab83168cfb18c83a93aa89f;hp=858a1e29ead4e57aa4f9d4830573050e1350e8ad;hb=20806454f8348d631df2c94208febe56b00e0adb;hpb=efc466d375e2b60c34990b39b135ce56bd38a99b diff --git a/bin/megatron/hqx.c b/bin/megatron/hqx.c index 858a1e29..117c9dd6 100644 --- a/bin/megatron/hqx.c +++ b/bin/megatron/hqx.c @@ -1,35 +1,36 @@ /* - * $Id: hqx.c,v 1.9 2002-01-04 04:45:47 sibaz Exp $ + * $Id: hqx.c,v 1.18 2010-01-27 21:27:53 didg Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" #endif /* HAVE_CONFIG_H */ -#include #include #include #include #include -#ifdef notdef -#if BSD >= 199006 -# include -#else /* BSD >= 199006 */ -# include -#endif /* BSD >= 199006 */ -#endif /* notdef */ + +#include +#include +#include +#include #include + +#include #ifdef HAVE_FCNTL_H #include #endif /* HAVE_FCNTL_H */ -#include -#include -#include -#include + +#include + #include #include + #include "megatron.h" +#include "nad.h" #include "hqx.h" +#include "updcrc.h" #define HEXOUTPUT 0 @@ -65,22 +66,11 @@ #define BHH_CRCSIZ 2 #define BHH_HEADSIZ 21 -u_short updcrc(); - -/* Forward declarations. - */ -int skip_junk(int line); -int hqx_close(int keepflag); -int hqx_header_read(struct FHeader *fh); -int hqx_header_write(struct FHeader *fh); -int hqx_7tobin(char *outbuf, int datalen); -int hqx7_fill(u_char *hqx7_ptr); - #if HEXOUTPUT FILE *rawhex, *expandhex; #endif /* HEXOUTPUT */ -struct hqx_file_data { +static struct hqx_file_data { u_int32_t forklen[ NUMFORKS ]; u_short forkcrc[ NUMFORKS ]; char path[ MAXPATHLEN + 1]; @@ -89,10 +79,10 @@ struct hqx_file_data { } hqx; extern char *forkname[]; -u_char hqx7_buf[8192]; -u_char *hqx7_first; -u_char *hqx7_last; -int first_flag; +static u_char hqx7_buf[8192]; +static u_char *hqx7_first; +static u_char *hqx7_last; +static int first_flag; /* hqx_open must be called first. pass it a filename that is supposed @@ -101,16 +91,14 @@ somewhat initialized; hqx_fd is set. skip_junk is called from here; skip_junk leaves hqx7_first and hqx7_last set. */ -int hqx_open( hqxfile, flags, fh, options ) - char *hqxfile; - int flags, options; - struct FHeader *fh; +int hqx_open(char *hqxfile, int flags, struct FHeader *fh, int options) { int maxlen; #if DEBUG fprintf( stderr, "megatron: entering hqx_open\n" ); #endif /* DEBUG */ + select_charset( options); if ( flags == O_RDONLY ) { #if HEXOUTPUT @@ -132,7 +120,7 @@ int hqx_open( hqxfile, flags, fh, options ) #if DEBUG off_t pos; - pos = lseek( hqx.filed, 0, L_INCR ); + pos = lseek( hqx.filed, 0, SEEK_CUR ); fprintf( stderr, "megatron: current position is %ld\n", pos ); #endif /* DEBUG */ return( 0 ); @@ -165,8 +153,7 @@ int hqx_open( hqxfile, flags, fh, options ) * Otherwise, a value of -1 is returned. */ -int hqx_close( keepflag ) - int keepflag; +int hqx_close(int keepflag) { if ( keepflag == KEEP ) { return( close( hqx.filed )); @@ -187,28 +174,25 @@ int hqx_close( keepflag ) * return zero and no more than that. */ -int hqx_read( fork, buffer, length ) - int fork; - char *buffer; - int length; +ssize_t hqx_read(int fork, char *buffer, size_t length) { u_short storedcrc; - int readlen; - int cc; + size_t readlen; + size_t cc; #if DEBUG >= 3 { off_t pos; - pos = lseek( hqx.filed, 0, L_INCR ); + pos = lseek( hqx.filed, 0, SEEK_CUR ); fprintf( stderr, "hqx_read: current position is %ld\n", pos ); } fprintf( stderr, "hqx_read: fork is %s\n", forkname[ fork ] ); fprintf( stderr, "hqx_read: remaining length is %d\n", hqx.forklen[fork] ); #endif /* DEBUG >= 3 */ - if ( hqx.forklen[ fork ] < 0 ) { - fprintf( stderr, "This should never happen, dude!\n" ); - return( hqx.forklen[ fork ] ); + if (hqx.forklen[fork] > 0x7FFFFFFF) { + fprintf(stderr, "This should never happen, dude!, fork length == %u\n", hqx.forklen[fork]); + return -1; } if ( hqx.forklen[ fork ] == 0 ) { @@ -257,8 +241,7 @@ int hqx_read( fork, buffer, length ) * to fill the hqx_header fields. */ -int hqx_header_read( fh ) - struct FHeader *fh; +int hqx_header_read(struct FHeader *fh) { char *headerbuf, *headerptr; u_int32_t time_seconds; @@ -286,7 +269,7 @@ int hqx_header_read( fh ) #endif /* HEXOUTPUT */ if (( headerbuf = - (char *)malloc( (unsigned int)( namelen + BHH_HEADSIZ ))) == 0 ) { + (char *)malloc( (unsigned int)( namelen + BHH_HEADSIZ ))) == NULL ) { return( -1 ); } if ( hqx_7tobin( headerbuf, ( namelen + BHH_HEADSIZ )) == 0 ) { @@ -391,8 +374,7 @@ int hqx_header_read( fh ) * hqx_header_write. */ -int hqx_header_write( fh ) - struct FHeader *fh; +int hqx_header_write(struct FHeader *fh _U_) { return( -1 ); } @@ -404,11 +386,10 @@ int hqx_header_write( fh ) * it sets the pointers to the hqx7 buffer up to point to the valid data. */ -int hqx7_fill( hqx7_ptr ) - u_char *hqx7_ptr; +ssize_t hqx7_fill(u_char *hqx7_ptr) { - int cc; - int cs; + ssize_t cc; + size_t cs; cs = hqx7_ptr - hqx7_buf; if ( cs >= sizeof( hqx7_buf )) return( -1 ); @@ -432,7 +413,7 @@ character that should be skipped, namely '\n', '\r'. 0xFD signals ':'. 0xFC signals a whitespace character. */ -u_char hqxlookup[] = { +static const u_char hqxlookup[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, @@ -475,8 +456,7 @@ u_char hqxlookup[] = { * OTHER when looking for any subsequent line. */ -int skip_junk( line ) -int line; +int skip_junk(int line) { int found = NOWAY; int stopflag; @@ -577,9 +557,7 @@ int line; * file is reached. */ -int hqx_7tobin( outbuf, datalen ) - char *outbuf; - int datalen; +size_t hqx_7tobin( char *outbuf, size_t datalen) { static u_char hqx8[3]; static int hqx8i;