lib.h revision 8087
160484Sobrien/* $Id: lib.h,v 1.15 1995/04/22 13:58:43 jkh Exp $ */
2218822Sdim
3218822Sdim/*
460484Sobrien * FreeBSD install - a package for the installation and maintainance
560484Sobrien * of non-core utilities.
660484Sobrien *
760484Sobrien * Redistribution and use in source and binary forms, with or without
860484Sobrien * modification, are permitted provided that the following conditions
960484Sobrien * are met:
1060484Sobrien * 1. Redistributions of source code must retain the above copyright
1160484Sobrien *    notice, this list of conditions and the following disclaimer.
1260484Sobrien * 2. Redistributions in binary form must reproduce the above copyright
1360484Sobrien *    notice, this list of conditions and the following disclaimer in the
1460484Sobrien *    documentation and/or other materials provided with the distribution.
1560484Sobrien *
1660484Sobrien * Jordan K. Hubbard
1760484Sobrien * 18 July 1993
1860484Sobrien *
1960484Sobrien * Include and define various things wanted by the library routines.
20218822Sdim *
2160484Sobrien */
2260484Sobrien
2360484Sobrien#ifndef _INST_LIB_LIB_H_
2460484Sobrien#define _INST_LIB_LIB_H_
2560484Sobrien
2660484Sobrien/* Includes */
2760484Sobrien#include <stdio.h>
2860484Sobrien#include <stdlib.h>
2960484Sobrien#include <stdarg.h>
3060484Sobrien#include <string.h>
3160484Sobrien#include <unistd.h>
3260484Sobrien#include <ctype.h>
3360484Sobrien#include <dirent.h>
3460484Sobrien#include <sys/stat.h>
3560484Sobrien#include <sys/types.h>
3660484Sobrien#include <sys/file.h>
3760484Sobrien
3860484Sobrien/* Macros */
3960484Sobrien#define SUCCESS	(0)
4060484Sobrien#define	FAIL	(-1)
4160484Sobrien
4260484Sobrien#ifndef TRUE
4360484Sobrien#define TRUE	(1)
4460484Sobrien#endif
4560484Sobrien
4660484Sobrien#ifndef FALSE
4760484Sobrien#define FALSE	(0)
4860484Sobrien#endif
4960484Sobrien
5060484Sobrien#define YES		2
5160484Sobrien#define NO		1
5260484Sobrien
5360484Sobrien/* Usually "rm", but often "echo" during debugging! */
5460484Sobrien#define REMOVE_CMD	"rm"
5560484Sobrien
5660484Sobrien/* Usually "rm", but often "echo" during debugging! */
5760484Sobrien#define RMDIR_CMD	"rmdir"
5860484Sobrien
5960484Sobrien/* Where we put logging information by default, else ${PKG_DBDIR} if set */
6060484Sobrien#define DEF_LOG_DIR		"/var/db/pkg"
6160484Sobrien/* just in case we change the environment variable name */
62130561Sobrien#define PKG_DBDIR		"PKG_DBDIR"
6360484Sobrien
6460484Sobrien/* The names of our "special" files */
65130561Sobrien#define CONTENTS_FNAME	"+CONTENTS"
6660484Sobrien#define COMMENT_FNAME	"+COMMENT"
6760484Sobrien#define DESC_FNAME	"+DESC"
68130561Sobrien#define INSTALL_FNAME	"+INSTALL"
6960484Sobrien#define DEINSTALL_FNAME	"+DEINSTALL"
7060484Sobrien#define REQUIRE_FNAME	"+REQUIRE"
71130561Sobrien#define REQUIRED_BY_FNAME	"+REQUIRED_BY"
7260484Sobrien#define DISPLAY_FNAME	"+DISPLAY"
7360484Sobrien#define MTREE_FNAME	"+MTREE_DIRS"
74130561Sobrien
7560484Sobrien#define CMD_CHAR	'@'	/* prefix for extended PLIST cmd */
7660484Sobrien
7760484Sobrien/* The name of the "prefix" environment variable given to scripts */
7860484Sobrien#define PKG_PREFIX_VNAME	"PKG_PREFIX"
79130561Sobrien
8060484Sobrienenum _plist_t {
8160484Sobrien    PLIST_FILE, PLIST_CWD, PLIST_CMD, PLIST_CHMOD,
8260484Sobrien    PLIST_CHOWN, PLIST_CHGRP, PLIST_COMMENT,
83130561Sobrien    PLIST_IGNORE, PLIST_NAME, PLIST_UNEXEC, PLIST_SRC, PLIST_DISPLAY,
8460484Sobrien    PLIST_PKGDEP, PLIST_MTREE, PLIST_DIR_RM, PLIST_IGNORE_INST,
8560484Sobrien    PLIST_OPTION
8660484Sobrien};
87130561Sobrientypedef enum _plist_t plist_t;
8860484Sobrien
8960484Sobrien/* Types */
90130561Sobrientypedef unsigned int Boolean;
9160484Sobrien
9277298Sobrienstruct _plist {
93130561Sobrien    struct _plist *prev, *next;
9477298Sobrien    char *name;
9589857Sobrien    Boolean marked;
96130561Sobrien    plist_t type;
9789857Sobrien};
9889857Sobrientypedef struct _plist *PackingList;
99130561Sobrien
10089857Sobrienstruct _pack {
10189857Sobrien    struct _plist *head, *tail;
102130561Sobrien};
10389857Sobrientypedef struct _pack Package;
104130561Sobrien
105130561Sobrien/* Prototypes */
106130561Sobrien/* Misc */
10792828Sobrienint		vsystem(const char *, ...);
108130561Sobrienvoid		cleanup(int);
10992828Sobrienchar		*make_playpen(char *, size_t);
11092828Sobrienvoid		leave_playpen(void);
111130561Sobrienchar		*where_playpen(void);
11292828Sobrienlong		min_free(char *);
113130561Sobrien
114130561Sobrien/* String */
115130561Sobrienchar 		*get_dash_string(char **);
116130561Sobrienchar		*copy_string(char *);
117130561SobrienBoolean		suffix(char *, char *);
118130561Sobrienvoid		nuke_suffix(char *);
119130561Sobrienvoid		str_lowercase(char *);
120130561Sobrienchar		*basename_of(char *);
121130561Sobrien
122130561Sobrien/* File */
123130561SobrienBoolean		fexists(char *);
124130561SobrienBoolean		isdir(char *);
125130561SobrienBoolean		isempty(char *);
126130561SobrienBoolean		isURL(char *);
127130561Sobrienchar		*fileGetURL(char *);
128130561Sobrienchar		*fileURLFilename(char *, char *, int);
129130561Sobrienchar		*fileURLHost(char *, char *, int);
130130561Sobrienchar		*fileFindByPath(char *);
131130561Sobrienchar		*fileGetContents(char *);
132130561Sobrienvoid		write_file(char *, char *);
133130561Sobrienvoid		copy_file(char *, char *, char *);
134130561Sobrienvoid		move_file(char *, char *, char *);
135130561Sobrienvoid		copy_hierarchy(char *, char *, Boolean);
136130561Sobrienint		delete_hierarchy(char *, Boolean, Boolean);
137218822Sdimint		unpack(char *, char *);
138218822Sdimvoid		format_cmd(char *, char *, char *, char *);
139218822Sdim
140218822Sdim/* Msg */
141218822Sdimvoid		upchuck(const char *);
142218822Sdimvoid		barf(const char *, ...);
143218822Sdimvoid		whinge(const char *, ...);
144218822SdimBoolean		y_or_n(Boolean, const char *, ...);
145218822Sdim
146218822Sdim/* Packing list */
147218822SdimPackingList	new_plist_entry(void);
148218822SdimPackingList	last_plist(Package *);
14960484SobrienPackingList	find_plist(Package *, plist_t);
15060484Sobrienchar		*find_plist_option(Package *, char *name);
15160484Sobrienvoid		plist_delete(Package *, Boolean, plist_t, char *);
15260484Sobrienvoid		free_plist(Package *);
15360484Sobrienvoid		mark_plist(Package *);
15460484Sobrienvoid		csum_plist_entry(char *, PackingList);
15560484Sobrienvoid		add_plist(Package *, plist_t, char *);
156218822Sdimvoid		add_plist_top(Package *, plist_t, char *);
157218822Sdimvoid		write_plist(Package *, FILE *);
15860484Sobrienvoid		read_plist(Package *, FILE *);
159218822Sdimint		plist_cmd(char *, char **);
160218822Sdimint		delete_package(Boolean, Boolean, Package *);
161218822Sdim
16260484Sobrien/* For all */
16360484Sobrienvoid		usage(const char *, const char *, ...);
16460484Sobrienint		pkg_perform(char **);
16560484Sobrien
16660484Sobrien/* Externs */
16760484Sobrienextern Boolean	Verbose;
168218822Sdimextern Boolean	Fake;
16960484Sobrienextern int	AutoAnswer;
170218822Sdim
17160484Sobrien#endif /* _INST_LIB_LIB_H_ */
17260484Sobrien