lib.h revision 4996
14996Sjkh/* $Id: lib.h,v 1.11 1994/11/17 10:51:46 jkh Exp $ */ 2327Sjkh 3327Sjkh/* 4327Sjkh * FreeBSD install - a package for the installation and maintainance 5327Sjkh * of non-core utilities. 6327Sjkh * 7327Sjkh * Redistribution and use in source and binary forms, with or without 8327Sjkh * modification, are permitted provided that the following conditions 9327Sjkh * are met: 10327Sjkh * 1. Redistributions of source code must retain the above copyright 11327Sjkh * notice, this list of conditions and the following disclaimer. 12327Sjkh * 2. Redistributions in binary form must reproduce the above copyright 13327Sjkh * notice, this list of conditions and the following disclaimer in the 14327Sjkh * documentation and/or other materials provided with the distribution. 15327Sjkh * 16327Sjkh * Jordan K. Hubbard 17327Sjkh * 18 July 1993 18327Sjkh * 19327Sjkh * Include and define various things wanted by the library routines. 20327Sjkh * 21327Sjkh */ 22327Sjkh 23327Sjkh#ifndef _INST_LIB_LIB_H_ 24327Sjkh#define _INST_LIB_LIB_H_ 25327Sjkh 26327Sjkh/* Includes */ 27327Sjkh#include <stdio.h> 28327Sjkh#include <stdlib.h> 29327Sjkh#include <stdarg.h> 30327Sjkh#include <string.h> 31327Sjkh#include <unistd.h> 32327Sjkh#include <ctype.h> 33327Sjkh#include <dirent.h> 34327Sjkh#include <sys/stat.h> 35327Sjkh#include <sys/types.h> 36327Sjkh#include <sys/file.h> 37327Sjkh 38327Sjkh/* Macros */ 39327Sjkh#define SUCCESS (0) 40327Sjkh#define FAIL (-1) 41327Sjkh 42327Sjkh#ifndef TRUE 43327Sjkh#define TRUE (1) 44327Sjkh#endif 45327Sjkh 46327Sjkh#ifndef FALSE 47327Sjkh#define FALSE (0) 48327Sjkh#endif 49327Sjkh 501338Sjkh#define YES 2 511338Sjkh#define NO 1 521338Sjkh 53327Sjkh/* Usually "rm", but often "echo" during debugging! */ 54327Sjkh#define REMOVE_CMD "rm" 55327Sjkh 56327Sjkh/* Usually "rm", but often "echo" during debugging! */ 57327Sjkh#define RMDIR_CMD "rmdir" 58327Sjkh 59327Sjkh/* Where we put logging information */ 60327Sjkh#define LOG_DIR "/var/db/pkg" 61327Sjkh 62327Sjkh/* The names of our "special" files */ 63327Sjkh#define CONTENTS_FNAME "+CONTENTS" 64327Sjkh#define COMMENT_FNAME "+COMMENT" 65327Sjkh#define DESC_FNAME "+DESC" 66327Sjkh#define INSTALL_FNAME "+INSTALL" 67327Sjkh#define DEINSTALL_FNAME "+DEINSTALL" 68327Sjkh#define REQUIRE_FNAME "+REQUIRE" 694996Sjkh#define REQUIRED_BY_FNAME "+REQUIRED_BY" 704996Sjkh#define DISPLAY_FNAME "+DISPLAY" 714996Sjkh#define MTREE_FNAME "+MTREE_DIRS" 72327Sjkh 73327Sjkh#define CMD_CHAR '@' /* prefix for extended PLIST cmd */ 74327Sjkh 751550Sasami/* The name of the "prefix" environment variable given to scripts */ 761550Sasami#define PKG_PREFIX_VNAME "PKG_PREFIX" 77479Sjkh 78327Sjkhenum _plist_t { 79327Sjkh PLIST_FILE, PLIST_CWD, PLIST_CMD, PLIST_CHMOD, 80327Sjkh PLIST_CHOWN, PLIST_CHGRP, PLIST_COMMENT, 814996Sjkh PLIST_IGNORE, PLIST_NAME, PLIST_UNEXEC, PLIST_SRC, PLIST_DISPLAY, 824996Sjkh PLIST_PKGDEP, PLIST_MTREE, PLIST_DIR_RM, PLIST_IGNORE_INST 83327Sjkh}; 84327Sjkhtypedef enum _plist_t plist_t; 85327Sjkh 86327Sjkh/* Types */ 87327Sjkhtypedef unsigned int Boolean; 88327Sjkh 89327Sjkhstruct _plist { 90327Sjkh struct _plist *prev, *next; 91327Sjkh char *name; 92327Sjkh Boolean marked; 93327Sjkh plist_t type; 94327Sjkh}; 95327Sjkhtypedef struct _plist *PackingList; 96327Sjkh 97327Sjkhstruct _pack { 98327Sjkh struct _plist *head, *tail; 99327Sjkh}; 100327Sjkhtypedef struct _pack Package; 101327Sjkh 102327Sjkh/* Prototypes */ 103327Sjkh/* Misc */ 104327Sjkhint vsystem(const char *, ...); 105327Sjkhvoid cleanup(int); 1063364Sjkhchar *make_playpen(char *, size_t); 107327Sjkhvoid leave_playpen(void); 108383Sjkhchar *where_playpen(void); 109327Sjkh 110327Sjkh/* String */ 111327Sjkhchar *get_dash_string(char **); 112327Sjkhchar *copy_string(char *); 113327SjkhBoolean suffix(char *, char *); 114327Sjkhvoid nuke_suffix(char *); 115327Sjkhvoid str_lowercase(char *); 1164546Sjkhchar *basename_of(char *); 117327Sjkh 118327Sjkh/* File */ 119327SjkhBoolean fexists(char *); 120327SjkhBoolean isdir(char *); 121327SjkhBoolean isempty(char *); 122327Sjkhchar *get_file_contents(char *); 123327Sjkhvoid write_file(char *, char *); 124327Sjkhvoid copy_file(char *, char *, char *); 125327Sjkhvoid copy_hierarchy(char *, char *, Boolean); 1264996Sjkhint delete_hierarchy(char *, Boolean, Boolean); 127327Sjkhint unpack(char *, char *); 128479Sjkhvoid format_cmd(char *, char *, char *, char *); 129327Sjkh 130327Sjkh/* Msg */ 131327Sjkhvoid upchuck(const char *); 132327Sjkhvoid barf(const char *, ...); 133327Sjkhvoid whinge(const char *, ...); 134327SjkhBoolean y_or_n(Boolean, const char *, ...); 135327Sjkh 136327Sjkh/* Packing list */ 137327SjkhPackingList new_plist_entry(void); 138327SjkhPackingList last_plist(Package *); 1391547SjkhPackingList find_plist(Package *, plist_t); 140383Sjkhvoid plist_delete(Package *, Boolean, plist_t, char *); 141327Sjkhvoid free_plist(Package *); 142327Sjkhvoid mark_plist(Package *); 143327Sjkhvoid csum_plist_entry(char *, PackingList); 144379Sjkhvoid add_plist(Package *, plist_t, char *); 145379Sjkhvoid add_plist_top(Package *, plist_t, char *); 146327Sjkhvoid write_plist(Package *, FILE *); 147327Sjkhvoid read_plist(Package *, FILE *); 148327Sjkhint plist_cmd(char *, char **); 1494996Sjkhint delete_package(Boolean, Boolean, Package *); 150327Sjkh 151327Sjkh/* For all */ 152327Sjkhvoid usage(const char *, const char *, ...); 153327Sjkhint pkg_perform(char **); 154327Sjkh 155327Sjkh/* Externs */ 156327Sjkhextern Boolean Verbose; 157327Sjkhextern Boolean Fake; 1581338Sjkhextern int AutoAnswer; 159327Sjkh 160327Sjkh#endif /* _INST_LIB_LIB_H_ */ 161