inc.h revision 12792:1f56a791e275
1/* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 22/* 23 * Copyright (c) 1995, 2010, Oracle and/or its affiliates. All rights reserved. 24 */ 25 26/* 27 * Copyright (c) 1988 AT&T 28 * All Rights Reserved 29 * 30 */ 31 32#ifndef _INC_H 33#define _INC_H 34 35#include <stdio.h> 36#include <stdarg.h> 37#include <stdlib.h> 38#include <errno.h> 39#include <ctype.h> 40#include <unistd.h> 41#include <signal.h> 42#include <sys/stat.h> 43#include <errno.h> 44#include <string.h> 45#include <fcntl.h> 46#include <sys/types.h> 47#include <sys/param.h> 48#include <time.h> 49#include <locale.h> 50#include <ar.h> 51#include <libelf.h> 52#include "sgs.h" 53#include "msg.h" 54 55#define CHUNK 500 56#define SYMCHUNK 1000 57#define SNAME 16 58#define ROUNDUP(x) (((x) + 1) & ~1) 59 60#define DATESIZE 60 /* sizeof (struct ar_hdr) */ 61 62typedef struct arfile ARFILE; 63typedef ARFILE *ARFILEP; 64 65/* 66 * Per-member state, help on listhead/listend list. 67 */ 68struct arfile { 69 char ar_name[SNAME]; /* info from archive member header */ 70 time_t ar_date; 71 int ar_uid; 72 int ar_gid; 73 unsigned long ar_mode; 74 size_t ar_size; 75 char *ar_longname; 76 char *ar_rawname; 77 Elf *ar_elf; /* My elf descriptor */ 78 char *ar_pathname; 79 char *ar_contents; 80 size_t ar_offset; /* The member offset */ 81 unsigned char ar_flag; 82 unsigned char ar_padding; /* # padding bytes following data */ 83 ARFILE *ar_next; /* Next member in linked list or NULL */ 84}; 85 86/* 87 * Command function. There is one of these for each operation 88 * ar can perform (r, x, etc). 89 */ 90struct cmd_info; 91typedef void Cmd_func(struct cmd_info *); 92 93/* Command information block */ 94typedef struct cmd_info { 95 char *arnam; /* Archive file name */ 96 int afd; /* fd for the archive file */ 97 Elf *arf; /* Elf descriptor for the archive */ 98 char *ponam; /* Position Name (-a, -b/-i) */ 99 char **namv; /* Member names from command line */ 100 int namc; /* # of member names in namv */ 101 int opt_flgs; /* options */ 102 Cmd_func *comfun; /* function to carry out command */ 103 int modified; /* Set if need to write archive */ 104} Cmd_info; 105 106/* 107 * options (Cmd_info opt_flgs) 108 */ 109#define a_FLAG 0x00000001 110#define b_FLAG 0x00000002 111#define c_FLAG 0x00000004 112#define C_FLAG 0x00000008 113#define d_FLAG 0x00000010 114#define m_FLAG 0x00000020 115#define p_FLAG 0x00000040 116#define q_FLAG 0x00000080 117#define r_FLAG 0x00000100 118#define s_FLAG 0x00000200 119#define S_FLAG 0x00000400 120#define t_FLAG 0x00000800 121#define T_FLAG 0x00001000 122#define u_FLAG 0x00002000 123#define v_FLAG 0x00004000 124#define x_FLAG 0x00008000 125#define z_FLAG 0x00010000 126 127/* 128 * Member flags (ARFILE ar_flag) 129 */ 130#define F_ELFRAW 0x01 /* ar_contents data via elf_rawfile */ 131#define F_CLASS32 0x02 /* ELFCLASS32 */ 132#define F_CLASS64 0x04 /* ELFCLASS64 */ 133 134/* 135 * Function prototypes 136 */ 137Cmd_func qcmd; 138Cmd_func rcmd; 139Cmd_func dcmd; 140Cmd_func xcmd; 141Cmd_func pcmd; 142Cmd_func mcmd; 143Cmd_func tcmd; 144 145extern ARFILE *listhead, *listend; 146 147extern void establish_sighandler(void (*)()); 148extern int getaf(Cmd_info *); 149extern ARFILE *getfile(Cmd_info *); 150extern ARFILE *newfile(void); 151extern char *trim(char *); 152extern void writefile(Cmd_info *cmd_info); 153 154 155#endif /* _INC_H */ 156