xref: /titanic_52/usr/src/cmd/sgs/ar/common/inc.h (revision ba7866cd2cbdf574f47d4e38a1301b90744dd677)
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