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