ftp.nice.ch/pub/next/developer/nextsources/cctools.s.tar.gz#/cctools/include/stuff/ofile.h

This is ofile.h in view mode; [Download] [Up]

/* ofile.h */
#import <ar.h>
#import <mach-o/loader.h>
#import "stuff/bytesex.h"
#import "stuff/bool.h"
#import "stuff/arch.h"

enum ofile_type {
    OFILE_UNKNOWN,
    OFILE_FAT,
    OFILE_ARCHIVE,
    OFILE_Mach_O
};

/*
 * The structure used by ofile_*() routines for object files.
 */
struct ofile {
    char *file_name;		    /* pointer to name malloc'ed by ofile_map */
    char *file_addr;		    /* pointer to vm_allocate'ed memory       */
    unsigned long file_size;	    /* size of vm_allocate'ed memory	      */
    enum ofile_type file_type;	    /* type of the file			      */

    struct fat_header *fat_header;  /* If a fat file these are filled in and */
    struct fat_arch *fat_archs;     /*  if needed converted to host byte sex */

    /* If this is a fat file then these are valid and filled in */
    unsigned long narch;	    /* the current architecture */
    enum ofile_type arch_type;	    /* the type of file for this arch. */
    struct arch_flag arch_flag;     /* the arch_flag for this arch, the name */
				    /*  field is pointing at space malloc'ed */
				    /*  by ofile_map. */

    /* If this structure is currently referencing an archive member or an object
       file that is an archive member these are valid and filled in. */
    unsigned long member_offset;    /* logical offset to the member starting */
    char *member_addr;      	    /* pointer to the member contents */
    unsigned long member_size;      /* actual size of the member (not rounded)*/
    struct ar_hdr *member_ar_hdr;   /* pointer to the ar_hdr for this member */
    enum ofile_type member_type;    /* the type of file for this member */
    cpu_type_t archive_cputype;	    /* if the archive contains objects then */
    cpu_subtype_t		    /*  these two fields reflect the object */
	archive_cpusubtype;	    /*  at are in the archive. */

    /* If this structure is currently referencing an object file these are
       valid and filled in.  The mach_header and load commands have been 
       converted to the host byte sex if needed */
    char *object_addr;		    /* the address of the object file */
    unsigned long object_size;	    /* the size of the object file */
    enum byte_sex object_byte_sex;  /* the byte sex of the object file */
    struct mach_header *mh;	    /* the mach_header of the object file */
    struct load_command		    /* the start of the load commands */
	*load_commands;
};

extern void ofile_process(
    char *name,
    struct arch_flag *arch_flags,
    unsigned long narch_flags,
    enum bool all_archs,
    enum bool process_non_objects,
    void (*processor)(struct ofile *ofile, char *arch_name, void *cookie),
    void *cookie);
extern enum bool ofile_map(
    const char *file_name,
    const struct arch_flag *arch_flag,	/* can be NULL */
    const char *object_name,		/* can be NULL */
    struct ofile *ofile,
    enum bool archives_with_fat_objects);
extern void ofile_unmap(
    struct ofile *ofile);
extern enum bool ofile_first_arch(
    struct ofile *ofile);
extern enum bool ofile_next_arch(
    struct ofile *ofile);
enum bool ofile_first_member(
    struct ofile *ofile);
enum bool ofile_next_member(
    struct ofile *ofile);
extern enum bool ofile_specific_member(
    const char *object_name,
    struct ofile *ofile);
extern void ofile_print(
    struct ofile *ofile);
extern unsigned long size_ar_name(
    const struct ar_hdr *ar_hdr);
extern long ofile_get_word(
    unsigned long addr,
    unsigned long *word,
    void *get_word_data /* struct ofile *ofile */);

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.