--- 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) {