summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/depend.c')
-rw-r--r--src/core/depend.c107
1 files changed, 66 insertions, 41 deletions
diff --git a/src/core/depend.c b/src/core/depend.c
index 8fc6056..4946326 100644
--- a/src/core/depend.c
+++ b/src/core/depend.c
@@ -51,7 +51,8 @@ char *service_type_names[] = {
int __service_resolve_dependency(char *servicename, char *dependency, service_type_t type);
-service_info_t *service_get_info(char *servicename) {
+service_info_t *service_get_info(char *servicename)
+{
service_info_t *info;
if ((NULL == servicename) || (0 == strlen(servicename))) {
@@ -72,7 +73,8 @@ service_info_t *service_get_info(char *servicename) {
return NULL;
}
-int service_add(char *servicename) {
+int service_add(char *servicename)
+{
service_info_t *info;
service_info_t *sorted;
int count;
@@ -120,13 +122,16 @@ int service_add(char *servicename) {
return -1;
}
-int service_is_dependency(char *servicename, char *dependency, service_type_t type) {
+int service_is_dependency(char *servicename, char *dependency, service_type_t type)
+{
service_info_t *info;
char *service;
int count = 0;
- if ((NULL == servicename) || (0 == strlen(servicename)) ||
- (NULL == dependency) || (0 == strlen(dependency))) {
+ if ((NULL == servicename)
+ || (0 == strlen(servicename))
+ || (NULL == dependency)
+ || (0 == strlen(dependency))) {
DBG_MSG("Invalid argument passed!\n");
return -1;
}
@@ -144,12 +149,15 @@ int service_is_dependency(char *servicename, char *dependency, service_type_t ty
return -1;
}
-int service_add_dependency(char *servicename, char *dependency, service_type_t type) {
+int service_add_dependency(char *servicename, char *dependency, service_type_t type)
+{
service_info_t *info;
char *tmp_buf;
- if ((NULL == servicename) || (0 == strlen(servicename)) ||
- (NULL == dependency) || (0 == strlen(dependency))) {
+ if ((NULL == servicename)
+ || (0 == strlen(servicename))
+ || (NULL == dependency)
+ || (0 == strlen(dependency))) {
DBG_MSG("Invalid argument passed!\n");
return -1;
}
@@ -159,7 +167,7 @@ int service_add_dependency(char *servicename, char *dependency, service_type_t t
/* Do not add duplicates */
if (-1 == service_is_dependency(servicename, dependency, type)) {
DBG_MSG("Adding dependency '%s' of service '%s', type '%s'.\n",
- dependency, servicename, service_type_names[type]);
+ dependency, servicename, service_type_names[type]);
tmp_buf = strndup(dependency, strlen(dependency));
if (NULL == tmp_buf) {
@@ -170,8 +178,7 @@ int service_add_dependency(char *servicename, char *dependency, service_type_t t
STRING_LIST_ADD_SORT(info->depend_info[type], tmp_buf, error);
} else {
DBG_MSG("Duplicate dependency '%s' for service '%s', type '%s'!\n",
- dependency, servicename,
- service_type_names[type]);
+ dependency, servicename, service_type_names[type]);
/* Rather do not fail here, as we add a lot of doubles
* during resolving of dependencies */
}
@@ -185,11 +192,14 @@ error:
return -1;
}
-int service_del_dependency(char *servicename, char *dependency, service_type_t type) {
+int service_del_dependency(char *servicename, char *dependency, service_type_t type)
+{
service_info_t *info;
- if ((NULL == servicename) || (0 == strlen(servicename)) ||
- (NULL == dependency) || (0 == strlen(dependency))) {
+ if ((NULL == servicename)
+ || (0 == strlen(servicename))
+ || (NULL == dependency)
+ || (0 == strlen(dependency))) {
DBG_MSG("Invalid argument passed!\n");
return -1;
}
@@ -202,7 +212,7 @@ int service_del_dependency(char *servicename, char *dependency, service_type_t t
info = service_get_info(servicename);
if (NULL != info) {
DBG_MSG("Removing dependency '%s' of service '%s', type '%s'.\n",
- dependency , servicename, service_type_names[type]);
+ dependency , servicename, service_type_names[type]);
STRING_LIST_DEL(info->depend_info[type], dependency, error);
return 0;
@@ -214,7 +224,8 @@ error:
return -1;
}
-service_info_t *service_get_virtual(char *virtual) {
+service_info_t *service_get_virtual(char *virtual)
+{
service_info_t *info;
if ((NULL == virtual) || (0 == strlen(virtual))) {
@@ -235,18 +246,21 @@ service_info_t *service_get_virtual(char *virtual) {
return NULL;
}
-int service_add_virtual(char *servicename, char* virtual) {
+int service_add_virtual(char *servicename, char* virtual)
+{
service_info_t *info;
- if ((NULL == servicename) || (0 == strlen(servicename)) ||
- (NULL == virtual ) || (0 == strlen(virtual))) {
+ if ((NULL == servicename)
+ || (0 == strlen(servicename))
+ || (NULL == virtual )
+ || (0 == strlen(virtual))) {
DBG_MSG("Invalid argument passed!\n");
return -1;
}
if (NULL != service_get_info(virtual)) {
EERROR(" Cannot add provide '%s', as a service with the same name exists!\n",
- virtual);
+ virtual);
/* Do not fail here as we do have a service that resolves
* the virtual */
}
@@ -255,7 +269,7 @@ int service_add_virtual(char *servicename, char* virtual) {
if (NULL != info) {
/* We cannot have more than one service Providing a virtual */
EWARN(" Service '%s' already provides '%s'!;\n",
- info->name, virtual);
+ info->name, virtual);
EWARN(" Not adding service '%s'...\n", servicename);
/* Do not fail here as we do have a service that resolves
* the virtual */
@@ -263,7 +277,7 @@ int service_add_virtual(char *servicename, char* virtual) {
info = service_get_info(servicename);
if (NULL != info) {
DBG_MSG("Adding virtual '%s' of service '%s'.\n",
- virtual, servicename);
+ virtual, servicename);
info->provide = strndup(virtual, strlen(virtual));
if (NULL == info->provide) {
@@ -279,7 +293,8 @@ int service_add_virtual(char *servicename, char* virtual) {
return 0;
}
-int service_set_mtime(char *servicename, time_t mtime) {
+int service_set_mtime(char *servicename, time_t mtime)
+{
service_info_t *info;
if ((NULL == servicename) || (0 == strlen(servicename))) {
@@ -290,7 +305,7 @@ int service_set_mtime(char *servicename, time_t mtime) {
info = service_get_info(servicename);
if (NULL != info) {
DBG_MSG("Setting mtime '%li' of service '%s'.\n",
- mtime, servicename);
+ mtime, servicename);
info->mtime = mtime;
@@ -302,12 +317,15 @@ int service_set_mtime(char *servicename, time_t mtime) {
return -1;
}
-int __service_resolve_dependency(char *servicename, char *dependency, service_type_t type) {
+int __service_resolve_dependency(char *servicename, char *dependency, service_type_t type)
+{
service_info_t *info;
int retval;
- if ((NULL == servicename) || (0 == strlen(servicename)) ||
- (NULL == dependency) || (0 == strlen(dependency))) {
+ if ((NULL == servicename)
+ || (0 == strlen(servicename))
+ || (NULL == dependency)
+ || (0 == strlen(dependency))) {
DBG_MSG("Invalid argument passed!\n");
return -1;
}
@@ -319,7 +337,7 @@ int __service_resolve_dependency(char *servicename, char *dependency, service_ty
}
DBG_MSG("Checking dependency '%s' of service '%s', type '%s'.\n",
- dependency, servicename, service_type_names[type]);
+ dependency, servicename, service_type_names[type]);
/* If there are no existing service 'dependency', try to resolve
* possible virtual services */
@@ -328,8 +346,8 @@ int __service_resolve_dependency(char *servicename, char *dependency, service_ty
info = service_get_virtual(dependency);
if (NULL != info) {
DBG_MSG("Virtual '%s' -> '%s' for service '%s', type '%s'.\n",
- dependency, info->name, servicename,
- service_type_names[type]);
+ dependency, info->name, servicename,
+ service_type_names[type]);
retval = service_del_dependency(servicename, dependency, type);
if (-1 == retval) {
@@ -352,7 +370,7 @@ int __service_resolve_dependency(char *servicename, char *dependency, service_ty
if (NULL == info) {
if ((type == NEED) || (type == NEED_ME)) {
EWARN(" Can't find service '%s' needed by '%s'; continuing...\n",
- dependency, servicename);
+ dependency, servicename);
retval = service_add_dependency(servicename, dependency, BROKEN);
if (-1 == retval) {
@@ -379,19 +397,22 @@ int __service_resolve_dependency(char *servicename, char *dependency, service_ty
/* Dont work too well with the '*' before and after */
if ((type != BEFORE) && (type != AFTER))
EWARN(" Service '%s' can't depend on itself; continuing...\n",
- servicename);
+ servicename);
/* Delete invalid entry */
goto remove;
}
/* Currently only these depend/order types are supported */
- if ((type == NEED) || (type == USE) || (type == BEFORE) || (type == AFTER)) {
+ if ((type == NEED)
+ || (type == USE)
+ || (type == BEFORE)
+ || (type == AFTER)) {
if (type == BEFORE) {
/* NEED and USE override BEFORE
* ('servicename' BEFORE 'dependency') */
- if ((0 == service_is_dependency(servicename, dependency, NEED)) ||
- (0 == service_is_dependency(servicename, dependency, USE))) {
+ if ((0 == service_is_dependency(servicename, dependency, NEED))
+ || (0 == service_is_dependency(servicename, dependency, USE))) {
/* Delete invalid entry */
goto remove;
}
@@ -400,8 +421,8 @@ int __service_resolve_dependency(char *servicename, char *dependency, service_ty
if (type == AFTER) {
/* NEED and USE override AFTER
* ('servicename' AFTER 'dependency') */
- if ((0 == service_is_dependency(dependency, servicename, NEED)) ||
- (0 == service_is_dependency(dependency, servicename, USE))) {
+ if ((0 == service_is_dependency(dependency, servicename, NEED))
+ || (0 == service_is_dependency(dependency, servicename, USE))) {
/* Delete invalid entry */
goto remove;
}
@@ -410,9 +431,9 @@ int __service_resolve_dependency(char *servicename, char *dependency, service_ty
/* We do not want to add circular dependencies ... */
if (0 == service_is_dependency(dependency, servicename, type)) {
EWARN(" Services '%s' and '%s' have circular\n",
- servicename, dependency);
+ servicename, dependency);
EWARN(" dependency of type '%s'; continuing...\n",
- service_type_names[type]);
+ service_type_names[type]);
/* For now remove this dependency */
goto remove;
@@ -472,7 +493,8 @@ remove:
return 0;
}
-int service_resolve_dependencies(void) {
+int service_resolve_dependencies(void)
+{
service_info_t *info;
char *service;
char *next = NULL;
@@ -480,8 +502,11 @@ int service_resolve_dependencies(void) {
/* Add our 'net' service */
if (NULL == service_get_info("net")) {
- if (-1 == service_add("net"))
+ if (-1 == service_add("net")) {
+ DBG_MSG("Failed to add virtual!\n");
return -1;
+ }
+ service_set_mtime("net", 0);
}
/* Calculate all virtuals */