/*
- * $Id: macbin.c,v 1.12 2005-04-28 20:49:19 bfernhomberg Exp $
*/
#ifdef HAVE_CONFIG_H
#include <sys/uio.h>
#include <sys/time.h>
#include <sys/param.h>
-#ifdef HAVE_FCNTL_H
#include <fcntl.h>
-#endif /* HAVE_FCNTL_H */
-#ifdef HAVE_UNISTD_H
#include <unistd.h>
-#endif /* HAVE_UNISTD_H */
#include <string.h>
#include <strings.h>
#include <ctype.h>
#include <netatalk/endian.h>
#include "megatron.h"
#include "macbin.h"
+#include "updcrc.h"
/* This allows megatron to generate .bin files that won't choke other
well-known converter apps. It also makes sure that checksums
following globals; therefore this module can only be used
for one of the two functions at a time.
*/
-struct bin_file_data {
+static struct bin_file_data {
u_int32_t forklen[ NUMFORKS ];
char path[ MAXPATHLEN + 1];
int filed;
} bin;
extern char *forkname[];
-u_char head_buf[HEADBUFSIZ];
+static u_char head_buf[HEADBUFSIZ];
/*
* bin_open must be called first. pass it a filename that is supposed
* somewhat initialized; bin_filed is set.
*/
-int bin_open( binfile, flags, fh, options )
- char *binfile;
- int flags, options;
- struct FHeader *fh;
+int bin_open(char *binfile, int flags, struct FHeader *fh, int options)
{
int maxlen;
int rc;
* Otherwise, a value of -1 is returned.
*/
-int bin_close( keepflag )
- int keepflag;
+int bin_close(int keepflag)
{
#if DEBUG
fprintf( stderr, "entering bin_close\n" );
* return zero and no more than that.
*/
-int bin_read( fork, buffer, length )
- int fork;
- char *buffer;
- int length;
+ssize_t bin_read( int fork, char *buffer, size_t length)
{
char *buf_ptr;
- int readlen;
- int cc = 1;
+ size_t readlen;
+ ssize_t cc = 1;
off_t pos;
#if DEBUG >= 3
fprintf( stderr, "bin_read: remaining length is %d\n", bin.forklen[fork] );
#endif /* DEBUG >= 3 */
- if (bin.forklen[fork] > length) {
- fprintf(stderr, "This should never happen, dude! length %d, fork length == %u\n", length, bin.forklen[fork]);
- return bin.forklen[fork];
+ if (bin.forklen[fork] > 0x7FFFFFFF) {
+ fprintf(stderr, "This should never happen, dude! fork length == %u\n", bin.forklen[fork]);
+ return -1;
}
if ( bin.forklen[ fork ] == 0 ) {
* bin_write
*/
-int bin_write( fork, buffer, length )
- int fork;
- char *buffer;
- int length;
+ssize_t bin_write(int fork, char *buffer, size_t length)
{
char *buf_ptr;
- int writelen;
- int cc = 0;
+ ssize_t writelen;
+ ssize_t cc = 0;
off_t pos;
u_char padchar = 0x7f;
/* Not sure why, but it seems this must be 0x7f to match
return( cc );
}
- if (length > bin.forklen[fork]) {
- fprintf(stderr, "This should never happen, dude! length %d, fork length %u\n", length, bin.forklen[fork]);
- return bin.forklen[fork];
- }
-
bin.forklen[fork] -= length;
/*
* of the bytes of the other two forks can be read, as well.
*/
-int bin_header_read( fh, revision )
- struct FHeader *fh;
- int revision;
+int bin_header_read(struct FHeader *fh, int revision)
{
u_short mask;
* bin_header_write and bin_header_read are opposites.
*/
-int bin_header_write( fh )
- struct FHeader *fh;
+int bin_header_write(struct FHeader *fh)
{
char *write_ptr;
u_int32_t t;
int test_header(void)
{
const char zeros[25] = "";
- u_int32_t cc;
+ ssize_t cc;
u_short header_crc;
u_char namelen;