lib.h revision 327
1251875Speter/* $Id: lib.h,v 1.4 1993/08/24 09:24:07 jkh Exp $ */ 2251875Speter 3251875Speter/* 4251875Speter * FreeBSD install - a package for the installation and maintainance 5251875Speter * of non-core utilities. 6251875Speter * 7251875Speter * Redistribution and use in source and binary forms, with or without 8251875Speter * modification, are permitted provided that the following conditions 9251875Speter * are met: 10251875Speter * 1. Redistributions of source code must retain the above copyright 11251875Speter * notice, this list of conditions and the following disclaimer. 12251875Speter * 2. Redistributions in binary form must reproduce the above copyright 13251875Speter * notice, this list of conditions and the following disclaimer in the 14251875Speter * documentation and/or other materials provided with the distribution. 15251875Speter * 16251875Speter * Jordan K. Hubbard 17251875Speter * 18 July 1993 18251875Speter * 19251875Speter * Include and define various things wanted by the library routines. 20251875Speter * 21251875Speter */ 22251875Speter 23251875Speter#ifndef _INST_LIB_LIB_H_ 24251875Speter#define _INST_LIB_LIB_H_ 25251875Speter 26251875Speter/* Includes */ 27251875Speter#include <stdio.h> 28251875Speter#include <stdlib.h> 29251875Speter#include <stdarg.h> 30251875Speter#include <string.h> 31251875Speter#include <unistd.h> 32251875Speter#include <ctype.h> 33251875Speter#include <dirent.h> 34251875Speter#include <sys/stat.h> 35251875Speter#include <sys/types.h> 36251875Speter#include <sys/file.h> 37251875Speter 38251875Speter/* Macros */ 39251875Speter#define SUCCESS (0) 40251875Speter#define FAIL (-1) 41251875Speter 42251875Speter#ifndef TRUE 43251875Speter#define TRUE (1) 44251875Speter#endif 45251875Speter 46251875Speter#ifndef FALSE 47251875Speter#define FALSE (0) 48251875Speter#endif 49251875Speter 50251875Speter/* Usually "rm", but often "echo" during debugging! */ 51251875Speter#define REMOVE_CMD "rm" 52251875Speter 53251875Speter/* Usually "rm", but often "echo" during debugging! */ 54251875Speter#define RMDIR_CMD "rmdir" 55251875Speter 56251875Speter/* Where we put logging information */ 57251875Speter#define LOG_DIR "/var/db/pkg" 58251875Speter 59251875Speter/* The names of our "special" files */ 60251875Speter#define CONTENTS_FNAME "+CONTENTS" 61251875Speter#define COMMENT_FNAME "+COMMENT" 62251875Speter#define DESC_FNAME "+DESC" 63251875Speter#define INSTALL_FNAME "+INSTALL" 64251875Speter#define DEINSTALL_FNAME "+DEINSTALL" 65251875Speter#define REQUIRE_FNAME "+REQUIRE" 66251875Speter 67251875Speter#define CMD_CHAR '@' /* prefix for extended PLIST cmd */ 68251875Speter 69251875Speterenum _plist_t { 70251875Speter PLIST_FILE, PLIST_CWD, PLIST_CMD, PLIST_CHMOD, 71251875Speter PLIST_CHOWN, PLIST_CHGRP, PLIST_COMMENT, 72251875Speter PLIST_IGNORE, PLIST_NAME 73251875Speter}; 74251875Spetertypedef enum _plist_t plist_t; 75251875Speter 76251875Speter/* Types */ 77251875Spetertypedef unsigned int Boolean; 78251875Speter 79251875Speterstruct _plist { 80251875Speter struct _plist *prev, *next; 81251875Speter char *name; 82251875Speter Boolean marked; 83251875Speter plist_t type; 84251875Speter}; 85251875Spetertypedef struct _plist *PackingList; 86251875Speter 87251875Speterstruct _pack { 88251875Speter struct _plist *head, *tail; 89251875Speter}; 90251875Spetertypedef struct _pack Package; 91251875Speter 92251875Speter/* Prototypes */ 93251875Speter/* Misc */ 94251875Speterint vsystem(const char *, ...); 95251875Spetervoid cleanup(int); 96251875Speterchar *make_playpen(void); 97251875Spetervoid leave_playpen(void); 98251875Speter 99251875Speter/* String */ 100251875Speterchar *get_dash_string(char **); 101251875Speterchar *copy_string(char *); 102251875SpeterBoolean suffix(char *, char *); 103251875Spetervoid nuke_suffix(char *); 104251875Spetervoid str_lowercase(char *); 105251875Speter 106251875Speter/* File */ 107251875SpeterBoolean fexists(char *); 108251875SpeterBoolean isdir(char *); 109251875SpeterBoolean isempty(char *); 110251875Speterchar *get_file_contents(char *); 111251875Spetervoid write_file(char *, char *); 112251875Spetervoid copy_file(char *, char *, char *); 113251875Spetervoid copy_hierarchy(char *, char *, Boolean); 114251875Speterint delete_hierarchy(char *, Boolean); 115251875Speterint unpack(char *, char *); 116251875Speter 117251875Speter/* Msg */ 118251875Spetervoid upchuck(const char *); 119251875Spetervoid barf(const char *, ...); 120251875Spetervoid whinge(const char *, ...); 121251875SpeterBoolean y_or_n(Boolean, const char *, ...); 122251875Speter 123251875Speter/* Packing list */ 124251875SpeterPackingList new_plist_entry(void); 125251875SpeterPackingList last_plist(Package *); 126251875Spetervoid free_plist(Package *); 127251875Spetervoid mark_plist(Package *); 128251875Spetervoid csum_plist_entry(char *, PackingList); 129251875Spetervoid add_plist(Package *, int, char *); 130251875Spetervoid write_plist(Package *, FILE *); 131251875Spetervoid read_plist(Package *, FILE *); 132251875Speterint plist_cmd(char *, char **); 133251875Spetervoid delete_package(Boolean, Package *); 134251875Speter 135251875Speter/* For all */ 136251875Spetervoid usage(const char *, const char *, ...); 137251875Speterint pkg_perform(char **); 138251875Speter 139251875Speter/* Externs */ 140251875Speterextern Boolean Verbose; 141251875Speterextern Boolean Fake; 142251875Speter 143251875Speter#endif /* _INST_LIB_LIB_H_ */ 144251875Speter