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