X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=bin%2Fmegatron%2Fasingle.c;h=60c754f0ac8fae5a6acd4679c806b8e6f7352007;hb=refs%2Ftags%2Fbranch-dircache-rewrite-start;hp=6ef52b8606a066ec25adbdd27120d4ecb35329e9;hpb=8d7e8b40fe0d5f41f0c132620f4a50235452b881;p=netatalk.git diff --git a/bin/megatron/asingle.c b/bin/megatron/asingle.c index 6ef52b86..60c754f0 100644 --- a/bin/megatron/asingle.c +++ b/bin/megatron/asingle.c @@ -1,5 +1,5 @@ /* - * $Id: asingle.c,v 1.9 2003-08-09 14:28:36 srittau Exp $ + * $Id: asingle.c,v 1.14 2010-01-27 21:27:53 didg Exp $ */ #ifdef HAVE_CONFIG_H @@ -47,14 +47,14 @@ following globals; therefore this module can only be used for one of the two functions at a time. */ -struct single_file_data { +static struct single_file_data { int filed; char path[ MAXPATHLEN + 1]; struct ad_entry entry[ ADEID_MAX ]; } single; extern char *forkname[]; -u_char header_buf[ AD_HEADER_LEN ]; +static u_char header_buf[ AD_HEADER_LEN ]; /* * single_open must be called first. pass it a filename that is supposed @@ -62,10 +62,7 @@ u_char header_buf[ AD_HEADER_LEN ]; * somewhat initialized; single_filed is set. */ -int single_open( singlefile, flags, fh, options ) - char *singlefile; - int flags, options; - struct FHeader *fh; +int single_open(char *singlefile, int flags, struct FHeader *fh, int options _U_) { int rc; @@ -96,8 +93,7 @@ int single_open( singlefile, flags, fh, options ) * Otherwise, a value of -1 is returned. */ -int single_close( keepflag ) - int keepflag; +int single_close( int keepflag) { if ( keepflag == KEEP ) { return( close( single.filed )); @@ -116,9 +112,7 @@ int single_close( keepflag ) * bytes of the other two forks can be read, as well. */ -int single_header_read( fh, version ) - struct FHeader *fh; - int version; +int single_header_read( struct FHeader *fh, int version) { /* * entry_buf is used for reading in entry descriptors, and for reading in @@ -268,7 +262,7 @@ int single_header_read( fh, version ) * Unless I can't get the current date, in which case use time zero. */ if (( date_entry < 7 ) || ( date_entry > 8 )) { - if (( time_seconds = time( NULL )) == -1 ) { + if (( time_seconds = time( NULL )) == (u_int32_t)-1 ) { time_seconds = AD_DATE_START; } else { time_seconds = AD_DATE_FROM_UNIX(time_seconds); @@ -310,9 +304,9 @@ int single_header_read( fh, version ) sizeof(fh->backup_date)); } if ( single.entry[ ADEID_RFORK ].ade_off == 0 ) { - fh->forklen[ ADEID_RFORK ] = 0; + fh->forklen[RESOURCE] = 0; } else { - fh->forklen[ ADEID_RFORK ] = + fh->forklen[RESOURCE] = htonl( single.entry[ ADEID_RFORK ].ade_len ); } if ( single.entry[ ADEID_DFORK ].ade_off == 0 ) { @@ -339,16 +333,16 @@ int single_header_read( fh, version ) * "Macintosh " (that is seven blanks of padding). */ #define MACINTOSH "Macintosh " -u_char sixteennulls[] = { 0, 0, 0, 0, 0, 0, 0, 0, +static u_char sixteennulls[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; int single_header_test(void) { - int cc; + ssize_t cc; u_int32_t templong; cc = read( single.filed, (char *)header_buf, sizeof( header_buf )); - if ( cc < sizeof( header_buf )) { + if ( cc < (ssize_t)sizeof( header_buf )) { perror( "Premature end of file :" ); return( -1 ); } @@ -395,15 +389,12 @@ int single_header_test(void) * */ -int single_read( fork, buffer, length ) - int fork; - char *buffer; - int length; +ssize_t single_read( int fork, char *buffer, size_t length) { u_int32_t entry_id; char *buf_ptr; - int readlen; - int cc = 1; + size_t readlen; + ssize_t cc = 1; off_t pos; switch ( fork ) { @@ -418,9 +409,9 @@ int single_read( fork, buffer, length ) break; } - if ( single.entry[ entry_id ].ade_len < 0 ) { - fprintf( stderr, "single_read: Trying to read past end of fork!\n" ); - return( single.entry[ entry_id ].ade_len ); + if (single.entry[entry_id].ade_len > 0x7FFFFFFF) { + fprintf(stderr, "single_read: Trying to read past end of fork!, ade_len == %u\n", single.entry[entry_id].ade_len); + return -1; } if ( single.entry[ entry_id ].ade_len == 0 ) { if ( fork == DATA ) {