summaryrefslogtreecommitdiff
blob: 2a7ff774d0a81a30203a3055fc3810293dbff614 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/*
 * depend.h
 *
 * Dependancy engine for Gentoo style rc-scripts.
 *
 * Copyright (C) 2004,2005 Martin Schlemmer <azarah@nosferatu.za.org>
 *
 *
 *      This program is free software; you can redistribute it and/or modify it
 *      under the terms of the GNU General Public License as published by the
 *      Free Software Foundation version 2 of the License.
 *
 *      This program is distributed in the hope that it will be useful, but
 *      WITHOUT ANY WARRANTY; without even the implied warranty of
 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *      General Public License for more details.
 *
 *      You should have received a copy of the GNU General Public License along
 *      with this program; if not, write to the Free Software Foundation, Inc.,
 *      675 Mass Ave, Cambridge, MA 02139, USA.
 *
 * $Header$
 */

#ifndef _DEPEND_H
#define _DEPEND_H

#include <sys/types.h>
#include "list.h"

/* Dependency types supported or still to be implemented */
typedef enum {
	NEED,		/* All dependencies needed by specified service */
	NEED_ME,	/* All dependencies that need specified service */
	USE,		/* All dependencies used by specified service */
	USE_ME,		/* All dependencies that use specified service */
	BEFORE,		/* All services started before specified service */
	AFTER,		/* All services started after specified service */
	BROKEN,		/* All dependencies of type NEED missing for
			   specified service */
	PROVIDE,	/* All virtual services provided by specified service */
	ALL_SERVICE_TYPE_T
} service_type_t;

/* Names for above service types (service_type_t).
 * Note that this should sync with above service_type_t */
extern char *service_type_names[];

typedef struct {
	struct list_head node;

	char *name;				/* Name of service */
	char **depend_info[ALL_SERVICE_TYPE_T];	/* String lists for each service
						   type */
	char *provide;				/* Name of virtual service it
						   provides.  This is only valid
						   after we resolving - thus after
						   service_resolve_dependencies() */
	time_t mtime;				/* Modification time of script */
} service_info_t;

struct list_head service_info_list;

service_info_t *service_get_info(char *servicename);
int service_add(char *servicename);
int service_is_dependency(char *servicename, char *dependency, service_type_t type);
int service_add_dependency(char *servicename, char *dependency, service_type_t type);
int service_del_dependency(char *servicename, char *dependency, service_type_t type);
service_info_t *service_get_virtual(char *virtual);
int service_add_virtual(char *servicename, char* virtual);
int service_set_mtime(char *servicename, time_t mtime);
int service_resolve_dependencies(void);

#endif /* _DEPEND_H */