17c478bd9Sstevel@tonic-gate /* 27c478bd9Sstevel@tonic-gate * CDDL HEADER START 37c478bd9Sstevel@tonic-gate * 47c478bd9Sstevel@tonic-gate * The contents of this file are subject to the terms of the 5d2d5cf7cSAli Bahrami * Common Development and Distribution License (the "License"). 6d2d5cf7cSAli Bahrami * You may not use this file except in compliance with the License. 77c478bd9Sstevel@tonic-gate * 87c478bd9Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 97c478bd9Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 107c478bd9Sstevel@tonic-gate * See the License for the specific language governing permissions 117c478bd9Sstevel@tonic-gate * and limitations under the License. 127c478bd9Sstevel@tonic-gate * 137c478bd9Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 147c478bd9Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 157c478bd9Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 167c478bd9Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 177c478bd9Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 187c478bd9Sstevel@tonic-gate * 197c478bd9Sstevel@tonic-gate * CDDL HEADER END 207c478bd9Sstevel@tonic-gate */ 21*ba7866cdSAli Bahrami 227c478bd9Sstevel@tonic-gate /* 23*ba7866cdSAli Bahrami * Copyright (c) 1995, 2010, Oracle and/or its affiliates. All rights reserved. 247c478bd9Sstevel@tonic-gate */ 257c478bd9Sstevel@tonic-gate 267c478bd9Sstevel@tonic-gate /* 277c478bd9Sstevel@tonic-gate * Copyright (c) 1988 AT&T 287c478bd9Sstevel@tonic-gate * All Rights Reserved 297c478bd9Sstevel@tonic-gate * 307c478bd9Sstevel@tonic-gate */ 317c478bd9Sstevel@tonic-gate 32d2d5cf7cSAli Bahrami #ifndef _INC_H 33d2d5cf7cSAli Bahrami #define _INC_H 347c478bd9Sstevel@tonic-gate 357c478bd9Sstevel@tonic-gate #include <stdio.h> 36*ba7866cdSAli Bahrami #include <stdarg.h> 37*ba7866cdSAli Bahrami #include <stdlib.h> 387c478bd9Sstevel@tonic-gate #include <errno.h> 397c478bd9Sstevel@tonic-gate #include <ctype.h> 407c478bd9Sstevel@tonic-gate #include <unistd.h> 417c478bd9Sstevel@tonic-gate #include <signal.h> 427c478bd9Sstevel@tonic-gate #include <sys/stat.h> 437c478bd9Sstevel@tonic-gate #include <errno.h> 447c478bd9Sstevel@tonic-gate #include <string.h> 457c478bd9Sstevel@tonic-gate #include <fcntl.h> 46*ba7866cdSAli Bahrami #include <sys/types.h> 47*ba7866cdSAli Bahrami #include <sys/param.h> 487c478bd9Sstevel@tonic-gate #include <time.h> 497c478bd9Sstevel@tonic-gate #include <locale.h> 50*ba7866cdSAli Bahrami #include <ar.h> 51*ba7866cdSAli Bahrami #include <libelf.h> 52*ba7866cdSAli Bahrami #include "sgs.h" 53*ba7866cdSAli Bahrami #include "msg.h" 547c478bd9Sstevel@tonic-gate 557c478bd9Sstevel@tonic-gate #define CHUNK 500 567c478bd9Sstevel@tonic-gate #define SYMCHUNK 1000 577c478bd9Sstevel@tonic-gate #define SNAME 16 587c478bd9Sstevel@tonic-gate #define ROUNDUP(x) (((x) + 1) & ~1) 597c478bd9Sstevel@tonic-gate 607c478bd9Sstevel@tonic-gate #define DATESIZE 60 /* sizeof (struct ar_hdr) */ 617c478bd9Sstevel@tonic-gate 627c478bd9Sstevel@tonic-gate typedef struct arfile ARFILE; 637c478bd9Sstevel@tonic-gate typedef ARFILE *ARFILEP; 647c478bd9Sstevel@tonic-gate 65*ba7866cdSAli Bahrami /* 66*ba7866cdSAli Bahrami * Per-member state, help on listhead/listend list. 67*ba7866cdSAli Bahrami */ 68*ba7866cdSAli Bahrami struct arfile { 697c478bd9Sstevel@tonic-gate char ar_name[SNAME]; /* info from archive member header */ 707c478bd9Sstevel@tonic-gate time_t ar_date; 717c478bd9Sstevel@tonic-gate int ar_uid; 727c478bd9Sstevel@tonic-gate int ar_gid; 737c478bd9Sstevel@tonic-gate unsigned long ar_mode; 74*ba7866cdSAli Bahrami size_t ar_size; 757c478bd9Sstevel@tonic-gate char *ar_longname; 767c478bd9Sstevel@tonic-gate char *ar_rawname; 777c478bd9Sstevel@tonic-gate Elf *ar_elf; /* My elf descriptor */ 787c478bd9Sstevel@tonic-gate char *ar_pathname; 797c478bd9Sstevel@tonic-gate char *ar_contents; 80*ba7866cdSAli Bahrami size_t ar_offset; /* The member offset */ 817c478bd9Sstevel@tonic-gate unsigned char ar_flag; 82*ba7866cdSAli Bahrami unsigned char ar_padding; /* # padding bytes following data */ 83*ba7866cdSAli Bahrami ARFILE *ar_next; /* Next member in linked list or NULL */ 847c478bd9Sstevel@tonic-gate }; 857c478bd9Sstevel@tonic-gate 86*ba7866cdSAli Bahrami /* 87*ba7866cdSAli Bahrami * Command function. There is one of these for each operation 88*ba7866cdSAli Bahrami * ar can perform (r, x, etc). 89*ba7866cdSAli Bahrami */ 90*ba7866cdSAli Bahrami struct cmd_info; 91*ba7866cdSAli Bahrami typedef void Cmd_func(struct cmd_info *); 92*ba7866cdSAli Bahrami 93*ba7866cdSAli Bahrami /* Command information block */ 947c478bd9Sstevel@tonic-gate typedef struct cmd_info { 957c478bd9Sstevel@tonic-gate char *arnam; /* Archive file name */ 967c478bd9Sstevel@tonic-gate int afd; /* fd for the archive file */ 977c478bd9Sstevel@tonic-gate Elf *arf; /* Elf descriptor for the archive */ 98*ba7866cdSAli Bahrami char *ponam; /* Position Name (-a, -b/-i) */ 99*ba7866cdSAli Bahrami char **namv; /* Member names from command line */ 100*ba7866cdSAli Bahrami int namc; /* # of member names in namv */ 101*ba7866cdSAli Bahrami int opt_flgs; /* options */ 102*ba7866cdSAli Bahrami Cmd_func *comfun; /* function to carry out command */ 103*ba7866cdSAli Bahrami int modified; /* Set if need to write archive */ 1047c478bd9Sstevel@tonic-gate } Cmd_info; 1057c478bd9Sstevel@tonic-gate 1067c478bd9Sstevel@tonic-gate /* 107*ba7866cdSAli Bahrami * options (Cmd_info opt_flgs) 1087c478bd9Sstevel@tonic-gate */ 109*ba7866cdSAli Bahrami #define a_FLAG 0x00000001 110*ba7866cdSAli Bahrami #define b_FLAG 0x00000002 111*ba7866cdSAli Bahrami #define c_FLAG 0x00000004 112*ba7866cdSAli Bahrami #define C_FLAG 0x00000008 113*ba7866cdSAli Bahrami #define d_FLAG 0x00000010 114*ba7866cdSAli Bahrami #define m_FLAG 0x00000020 115*ba7866cdSAli Bahrami #define p_FLAG 0x00000040 116*ba7866cdSAli Bahrami #define q_FLAG 0x00000080 117*ba7866cdSAli Bahrami #define r_FLAG 0x00000100 118*ba7866cdSAli Bahrami #define s_FLAG 0x00000200 119*ba7866cdSAli Bahrami #define S_FLAG 0x00000400 120*ba7866cdSAli Bahrami #define t_FLAG 0x00000800 121*ba7866cdSAli Bahrami #define T_FLAG 0x00001000 122*ba7866cdSAli Bahrami #define u_FLAG 0x00002000 123*ba7866cdSAli Bahrami #define v_FLAG 0x00004000 124*ba7866cdSAli Bahrami #define x_FLAG 0x00008000 125*ba7866cdSAli Bahrami #define z_FLAG 0x00010000 1267c478bd9Sstevel@tonic-gate 1277c478bd9Sstevel@tonic-gate /* 128*ba7866cdSAli Bahrami * Member flags (ARFILE ar_flag) 1297c478bd9Sstevel@tonic-gate */ 130*ba7866cdSAli Bahrami #define F_ELFRAW 0x01 /* ar_contents data via elf_rawfile */ 131*ba7866cdSAli Bahrami #define F_CLASS32 0x02 /* ELFCLASS32 */ 132*ba7866cdSAli Bahrami #define F_CLASS64 0x04 /* ELFCLASS64 */ 1337c478bd9Sstevel@tonic-gate 1347c478bd9Sstevel@tonic-gate /* 1357c478bd9Sstevel@tonic-gate * Function prototypes 1367c478bd9Sstevel@tonic-gate */ 137*ba7866cdSAli Bahrami Cmd_func qcmd; 138*ba7866cdSAli Bahrami Cmd_func rcmd; 139*ba7866cdSAli Bahrami Cmd_func dcmd; 140*ba7866cdSAli Bahrami Cmd_func xcmd; 141*ba7866cdSAli Bahrami Cmd_func pcmd; 142*ba7866cdSAli Bahrami Cmd_func mcmd; 143*ba7866cdSAli Bahrami Cmd_func tcmd; 1447c478bd9Sstevel@tonic-gate 145*ba7866cdSAli Bahrami extern ARFILE *listhead, *listend; 1467c478bd9Sstevel@tonic-gate 147*ba7866cdSAli Bahrami extern void establish_sighandler(void (*)()); 148*ba7866cdSAli Bahrami extern int getaf(Cmd_info *); 149*ba7866cdSAli Bahrami extern ARFILE *getfile(Cmd_info *); 150*ba7866cdSAli Bahrami extern ARFILE *newfile(void); 151*ba7866cdSAli Bahrami extern char *trim(char *); 152*ba7866cdSAli Bahrami extern void writefile(Cmd_info *cmd_info); 1537c478bd9Sstevel@tonic-gate 154d2d5cf7cSAli Bahrami 155d2d5cf7cSAli Bahrami #endif /* _INC_H */ 156