lib.h revision 327
1193326Sed/* $Id: lib.h,v 1.4 1993/08/24 09:24:07 jkh Exp $ */ 2193326Sed 3193326Sed/* 4193326Sed * FreeBSD install - a package for the installation and maintainance 5193326Sed * of non-core utilities. 6193326Sed * 7193326Sed * Redistribution and use in source and binary forms, with or without 8193326Sed * modification, are permitted provided that the following conditions 9193326Sed * are met: 10193326Sed * 1. Redistributions of source code must retain the above copyright 11193326Sed * notice, this list of conditions and the following disclaimer. 12193326Sed * 2. Redistributions in binary form must reproduce the above copyright 13193326Sed * notice, this list of conditions and the following disclaimer in the 14193326Sed * documentation and/or other materials provided with the distribution. 15193326Sed * 16202379Srdivacky * Jordan K. Hubbard 17198092Srdivacky * 18 July 1993 18203955Srdivacky * 19199482Srdivacky * Include and define various things wanted by the library routines. 20193326Sed * 21193326Sed */ 22203955Srdivacky 23193326Sed#ifndef _INST_LIB_LIB_H_ 24193326Sed#define _INST_LIB_LIB_H_ 25193326Sed 26198092Srdivacky/* Includes */ 27193326Sed#include <stdio.h> 28193326Sed#include <stdlib.h> 29204643Srdivacky#include <stdarg.h> 30204643Srdivacky#include <string.h> 31204643Srdivacky#include <unistd.h> 32204643Srdivacky#include <ctype.h> 33204643Srdivacky#include <dirent.h> 34204643Srdivacky#include <sys/stat.h> 35204643Srdivacky#include <sys/types.h> 36204643Srdivacky#include <sys/file.h> 37204643Srdivacky 38204643Srdivacky/* Macros */ 39204643Srdivacky#define SUCCESS (0) 40204643Srdivacky#define FAIL (-1) 41193326Sed 42193326Sed#ifndef TRUE 43198092Srdivacky#define TRUE (1) 44193326Sed#endif 45193326Sed 46193326Sed#ifndef FALSE 47198092Srdivacky#define FALSE (0) 48193326Sed#endif 49193326Sed 50193326Sed/* Usually "rm", but often "echo" during debugging! */ 51193326Sed#define REMOVE_CMD "rm" 52193326Sed 53193326Sed/* Usually "rm", but often "echo" during debugging! */ 54193326Sed#define RMDIR_CMD "rmdir" 55198092Srdivacky 56193326Sed/* Where we put logging information */ 57200583Srdivacky#define LOG_DIR "/var/db/pkg" 58198893Srdivacky 59193326Sed/* The names of our "special" files */ 60200583Srdivacky#define CONTENTS_FNAME "+CONTENTS" 61193326Sed#define COMMENT_FNAME "+COMMENT" 62193326Sed#define DESC_FNAME "+DESC" 63193326Sed#define INSTALL_FNAME "+INSTALL" 64200583Srdivacky#define DEINSTALL_FNAME "+DEINSTALL" 65198893Srdivacky#define REQUIRE_FNAME "+REQUIRE" 66200583Srdivacky 67193326Sed#define CMD_CHAR '@' /* prefix for extended PLIST cmd */ 68193326Sed 69193326Sedenum _plist_t { 70200583Srdivacky PLIST_FILE, PLIST_CWD, PLIST_CMD, PLIST_CHMOD, 71193326Sed PLIST_CHOWN, PLIST_CHGRP, PLIST_COMMENT, 72198092Srdivacky PLIST_IGNORE, PLIST_NAME 73198092Srdivacky}; 74193326Sedtypedef enum _plist_t plist_t; 75198092Srdivacky 76194613Sed/* Types */ 77193326Sedtypedef unsigned int Boolean; 78199990Srdivacky 79199990Srdivackystruct _plist { 80200583Srdivacky struct _plist *prev, *next; 81198893Srdivacky char *name; 82198893Srdivacky Boolean marked; 83198893Srdivacky plist_t type; 84193326Sed}; 85193326Sedtypedef struct _plist *PackingList; 86199990Srdivacky 87193326Sedstruct _pack { 88193326Sed struct _plist *head, *tail; 89193326Sed}; 90193326Sedtypedef struct _pack Package; 91193326Sed 92193326Sed/* Prototypes */ 93198092Srdivacky/* Misc */ 94193326Sedint vsystem(const char *, ...); 95193326Sedvoid cleanup(int); 96199512Srdivackychar *make_playpen(void); 97193326Sedvoid leave_playpen(void); 98198092Srdivacky 99193326Sed/* String */ 100198893Srdivackychar *get_dash_string(char **); 101200583Srdivackychar *copy_string(char *); 102198893SrdivackyBoolean suffix(char *, char *); 103198893Srdivackyvoid nuke_suffix(char *); 104198893Srdivackyvoid str_lowercase(char *); 105193326Sed 106193326Sed/* File */ 107198092SrdivackyBoolean fexists(char *); 108193326SedBoolean isdir(char *); 109198092SrdivackyBoolean isempty(char *); 110198092Srdivackychar *get_file_contents(char *); 111198893Srdivackyvoid write_file(char *, char *); 112198893Srdivackyvoid copy_file(char *, char *, char *); 113200583Srdivackyvoid copy_hierarchy(char *, char *, Boolean); 114198893Srdivackyint delete_hierarchy(char *, Boolean); 115198893Srdivackyint unpack(char *, char *); 116198893Srdivacky 117198092Srdivacky/* Msg */ 118198092Srdivackyvoid upchuck(const char *); 119198092Srdivackyvoid barf(const char *, ...); 120198092Srdivackyvoid whinge(const char *, ...); 121193326SedBoolean y_or_n(Boolean, const char *, ...); 122193326Sed 123193326Sed/* Packing list */ 124199482SrdivackyPackingList new_plist_entry(void); 125199482SrdivackyPackingList last_plist(Package *); 126202379Srdivackyvoid free_plist(Package *); 127202379Srdivackyvoid mark_plist(Package *); 128198092Srdivackyvoid csum_plist_entry(char *, PackingList); 129199482Srdivackyvoid add_plist(Package *, int, char *); 130204643Srdivackyvoid write_plist(Package *, FILE *); 131198092Srdivackyvoid read_plist(Package *, FILE *); 132199990Srdivackyint plist_cmd(char *, char **); 133193326Sedvoid delete_package(Boolean, Package *); 134199482Srdivacky 135206084Srdivacky/* For all */ 136206084Srdivackyvoid usage(const char *, const char *, ...); 137199482Srdivackyint pkg_perform(char **); 138193326Sed 139193326Sed/* Externs */ 140193326Sedextern Boolean Verbose; 141198092Srdivackyextern Boolean Fake; 142193326Sed 143203955Srdivacky#endif /* _INST_LIB_LIB_H_ */ 144203955Srdivacky