1
0
Files
irix-657m-src/eoe/cmd/bru/headers.c
2022-09-29 17:59:04 +03:00

161 lines
3.8 KiB
C
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/************************************************************************
* *
* Copyright (c) 1984, Fred Fish *
* All Rights Reserved *
* *
* This software and/or documentation is protected by U.S. *
* Copyright Law (Title 17 United States Code). Unauthorized *
* reproduction and/or sales may result in imprisonment of up *
* to 1 year and fines of up to $10,000 (17 USC 506). *
* Copyright infringers may also be subject to civil liability. *
* *
************************************************************************
*/
/*
* FILE
*
* headers.c routines to manipulate header blocks
*
* SCCS
*
* @(#)headers.c 9.11 5/11/88
*
* DESCRIPTION
*
* Contains routines which are primarily used to manipulate
* archive header blocks.
*
*/
#include "autoconfig.h"
#include <stdio.h>
#if (unix || xenix)
# include <sys/types.h>
# include <sys/stat.h>
#else
# include "sys.h"
#endif
#include "typedefs.h"
#include "dbug.h"
#include "manifest.h"
#include "config.h"
#include "blocks.h"
#include "macros.h"
#include "finfo.h"
/*
* External bru functions
*/
extern BOOLEAN chksum_ok (); /* Check checksum for block */
extern S32BIT fromhex (); /* Convert hex to 32 bit integer */
extern char *s_strcpy ();
/*
* NAME
*
* hcheck perform sanity checks on header block
*
* SYNOPSIS
*
* BOOLEAN hcheck (blkp)
* register union blk *blkp;
*
* DESCRIPTION
*
* Given pointer to a presumed header block, tests
* to see if the block passes various sanity checks.
*
* Currently only checks for proper checksum and magic number.
* Should eventually perform pattern type checks also.
*
*/
/*
* PSEUDO CODE
*
* Begin hcheck
* Default result is FALSE
* If the checksum is ok then
* If the magic number is ok then
* Result is TRUE
* End if
* End if
* Return result
* End hcheck
*
*/
BOOLEAN hcheck (blkp)
register union blk *blkp;
{
register BOOLEAN result; /* Result of test */
DBUG_ENTER ("hcheck");
result = FALSE;
if (chksum_ok (blkp)) {
DBUG_PRINT ("sanity", ("header checksum ok"));
if (FROMHEX (blkp -> HD.h_magic) == H_MAGIC) {
DBUG_PRINT ("sanity", ("magic number ok"));
result = TRUE;
}
}
DBUG_RETURN (result);
}
/*
* NAME
*
* hstat decode header block into a stat buffer
*
* SYNOPSIS
*
* VOID hstat (blkp, fip)
* register union blk *blkp;
* register struct finfo *fip;
*
* DESCRIPTION
*
* Decodes the contents of a header block, pointed to by
* "blkp", into a "stat" buffer.
*
* Also pulls out a couple of other finfo fields while we
* are at it.
*/
VOID hstat (blkp, fip)
register union blk *blkp;
register struct finfo *fip;
{
DBUG_ENTER ("hstat");
fip -> statp -> st_mode = (ushort) FROMHEX (blkp -> FH.f_mode);
fip -> statp -> st_ino = (ino_t) FROMHEX (blkp -> FH.f_ino);
fip -> statp -> st_dev = (dev_t) FROMHEX (blkp -> FH.f_dev);
fip -> statp -> st_rdev = (dev_t) FROMHEX (blkp -> FH.f_rdev);
fip -> statp -> st_nlink = (short) FROMHEX (blkp -> FH.f_nlink);
fip -> statp -> st_uid = (uid_t) FROMHEX (blkp -> FH.f_uid);
fip -> statp -> st_gid = (gid_t) FROMHEX (blkp -> FH.f_gid);
fip -> statp -> st_atime = (time_t) FROMHEX (blkp -> FH.f_atime);
fip -> statp -> st_mtime = (time_t) FROMHEX (blkp -> FH.f_mtime);
fip -> statp -> st_ctime = (time_t) FROMHEX (blkp -> FH.f_ctime);
fip -> fi_flags = (int) FROMHEX (blkp -> FH.f_flags);
fip -> fib_Protection = (long) FROMHEX (blkp -> FH.f_fibprot);
(VOID) s_strcpy (fip -> fib_Comment, blkp -> FH.f_fibcomm);
if (IS_COMPRESSED (fip)) {
fip -> statp -> st_size = FROMHEX (blkp -> FH.f_xsize);
fip -> zsize = (off_t) FROMHEX (blkp -> FH.f_size);
} else {
fip -> statp -> st_size = FROMHEX (blkp -> FH.f_size);
}
DBUG_VOID_RETURN;
}