/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright (c) 1995, 2010, Oracle and/or its affiliates. All rights reserved. */ /* * Copyright (c) 1988 AT&T * All Rights Reserved * */ #ifndef _INC_H #define _INC_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "sgs.h" #include "msg.h" #define CHUNK 500 #define SYMCHUNK 1000 #define SNAME 16 #define ROUNDUP(x) (((x) + 1) & ~1) #define DATESIZE 60 /* sizeof (struct ar_hdr) */ typedef struct arfile ARFILE; typedef ARFILE *ARFILEP; /* * Per-member state, help on listhead/listend list. */ struct arfile { char ar_name[SNAME]; /* info from archive member header */ time_t ar_date; int ar_uid; int ar_gid; unsigned long ar_mode; size_t ar_size; char *ar_longname; char *ar_rawname; Elf *ar_elf; /* My elf descriptor */ char *ar_pathname; char *ar_contents; size_t ar_offset; /* The member offset */ unsigned char ar_flag; unsigned char ar_padding; /* # padding bytes following data */ ARFILE *ar_next; /* Next member in linked list or NULL */ }; /* * Command function. There is one of these for each operation * ar can perform (r, x, etc). */ struct cmd_info; typedef void Cmd_func(struct cmd_info *); /* Command information block */ typedef struct cmd_info { char *arnam; /* Archive file name */ int afd; /* fd for the archive file */ Elf *arf; /* Elf descriptor for the archive */ char *ponam; /* Position Name (-a, -b/-i) */ char **namv; /* Member names from command line */ int namc; /* # of member names in namv */ int opt_flgs; /* options */ Cmd_func *comfun; /* function to carry out command */ int modified; /* Set if need to write archive */ } Cmd_info; /* * options (Cmd_info opt_flgs) */ #define a_FLAG 0x00000001 #define b_FLAG 0x00000002 #define c_FLAG 0x00000004 #define C_FLAG 0x00000008 #define d_FLAG 0x00000010 #define m_FLAG 0x00000020 #define p_FLAG 0x00000040 #define q_FLAG 0x00000080 #define r_FLAG 0x00000100 #define s_FLAG 0x00000200 #define S_FLAG 0x00000400 #define t_FLAG 0x00000800 #define T_FLAG 0x00001000 #define u_FLAG 0x00002000 #define v_FLAG 0x00004000 #define x_FLAG 0x00008000 #define z_FLAG 0x00010000 /* * Member flags (ARFILE ar_flag) */ #define F_ELFRAW 0x01 /* ar_contents data via elf_rawfile */ #define F_CLASS32 0x02 /* ELFCLASS32 */ #define F_CLASS64 0x04 /* ELFCLASS64 */ /* * Function prototypes */ Cmd_func qcmd; Cmd_func rcmd; Cmd_func dcmd; Cmd_func xcmd; Cmd_func pcmd; Cmd_func mcmd; Cmd_func tcmd; extern ARFILE *listhead, *listend; extern void establish_sighandler(void (*)()); extern int getaf(Cmd_info *); extern ARFILE *getfile(Cmd_info *); extern ARFILE *newfile(void); extern char *trim(char *); extern void writefile(Cmd_info *cmd_info); #endif /* _INC_H */