Sophie

Sophie

distrib > Mandriva > 2009.1 > x86_64 > media > main-release-src > by-pkgid > c82d688e4640550880953708261e4696 > files > 5

chkconfig-1.3.37-3mdv2009.1.src.rpm

--- chkconfig.c	2008-12-25 00:06:44.000000000 +0100
+++ chkconfig.c.oden	2008-12-25 00:06:57.000000000 +0100
@@ -270,7 +270,8 @@ static int frobOneDependencies(struct se
 		}
 	}
 
-	if (target || ((s0 != s->sPriority) || (k0 != s->kPriority))) {
+	int resolved = (s0 != s->sPriority) || (k0 != s->kPriority);
+	if (target || resolved) {
 		for (i = 0; i < 7; i++) {
 			if (isConfigured(s->name, i, NULL, NULL)) {
 				int on = isOn(s->name, i);
@@ -281,7 +282,7 @@ static int frobOneDependencies(struct se
 				doSetService(*s, i, ((1<<i) & s->levels));
 			}
 		}
-		return 1; /* Resolved something */
+		return resolved; /* Resolved something */
 	}
 	return 0; /* Didn't resolve anything */
 }
@@ -317,7 +318,6 @@ static void frobDependencies(struct serv
 			continue;
 		}
 		if (!S_ISREG(sb.st_mode)) continue;
-		if (!strcmp(ent->d_name, s->name)) continue;
 		servs = realloc(servs, (numservs+1) * sizeof(struct service));
 		if (!readServiceInfo(ent->d_name, servs + numservs, 0))
 			numservs++;
@@ -329,13 +329,12 @@ static void frobDependencies(struct serv
 		int i;
 		
 		for (i = 0; i < numservs ; i++) {
-			if ((servs+i)->isLSB)
-				nResolved += frobOneDependencies(servs+i, servs, numservs, 0);
+			if ((servs+i)->isLSB) {
+				int target = !strcmp((servs+i)->name, s->name);
+				nResolved += frobOneDependencies(servs+i, servs, numservs, target);
+			}
 		}
 	} while (nResolved);
-
-	/* Resolve our target */
-	frobOneDependencies(s, servs, numservs, 1);
 }
 
 static int addService(char * name) {