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