[Initscripts-ng-commits] r550 - in /trunk/src/insserv/debian/patches: 51_fakeloop_thinko-debian.dpatch 51_fakeloop_thinko.dpatch
pere at users.alioth.debian.org
pere at users.alioth.debian.org
Wed Jan 23 09:30:52 UTC 2008
Author: pere
Date: Wed Jan 23 09:30:52 2008
New Revision: 550
URL: http://svn.debian.org/wsvn/initscripts-ng/?sc=1&rev=550
Log:
Next try from Werner.
Added:
trunk/src/insserv/debian/patches/51_fakeloop_thinko-debian.dpatch
Modified:
trunk/src/insserv/debian/patches/51_fakeloop_thinko.dpatch
Added: trunk/src/insserv/debian/patches/51_fakeloop_thinko-debian.dpatch
URL: http://svn.debian.org/wsvn/initscripts-ng/trunk/src/insserv/debian/patches/51_fakeloop_thinko-debian.dpatch?rev=550&op=file
==============================================================================
--- trunk/src/insserv/debian/patches/51_fakeloop_thinko-debian.dpatch (added)
+++ trunk/src/insserv/debian/patches/51_fakeloop_thinko-debian.dpatch Wed Jan 23 09:30:52 2008
@@ -1,0 +1,178 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 51_fakeloop_thinko.dpatch by Petter Reinholdtsen
+
+Patch from Werner Fink to try to fix the problem with fake loops,
+adjusted by Petter Reinholdtsen to apply in the Debian patched source.
+
+ at DPATCH@
+--- insserv-1.10.0.orig/insserv.c
++++ insserv-1.10.0/insserv.c
+@@ -360,31 +360,39 @@
+ }
+ }
+
+-static void reversereq(const serv_t * serv, const char * token, const char * list)
++static void reversereq(const serv_t * serv, unsigned int bit, const char * list)
+ {
+ const char * dep;
+ char * rev = strdupa(list);
++ unsigned int old = bit;
+
+ while ((dep = strsep(&rev, delimeter)) && *dep) {
+ serv_t * tmp;
+ list_t * ptr;
+
++ if (!*dep)
++ continue;
++
++ bit = old;
++
+ switch (*dep) {
+ case '+':
+ dep++;
++ bit = REQ_SHLD;
+ default:
+- if ((tmp = findserv(dep))) {
++ if (!(tmp = findserv(dep)))
++ tmp = addserv(dep);
++ if (tmp) {
+ const char * name;
+ if ((name = getscript(serv->name)) == (char*)0)
+- name = serv->name;
+- rememberreq(tmp, REQ_SHLD, name);
++ name = serv->name;
++ rememberreq(tmp, bit, name);
+ }
+- requiresv(dep, token);
+ break;
+ case '$':
+ list_for_each(ptr, sysfaci_start) {
+ if (!strcmp(dep, getfaci(ptr)->name)) {
+- reversereq(serv, token, getfaci(ptr)->repl);
++ reversereq(serv, bit, getfaci(ptr)->repl);
+ break;
+ }
+ }
+@@ -1335,7 +1343,7 @@
+ script_inf.provides = xstrdup(ptr);
+
+ begin = script_inf.provides;
+- while ((token = strsep(&script_inf.provides, delimeter)) && *token) {
++ while ((token = strsep(&begin, delimeter)) && *token) {
+ serv_t * service = (serv_t*)0;
+ if (*token == '$') {
+ warn("script %s provides system facility %s, skipped!\n", d->d_name, token);
+@@ -1351,14 +1359,12 @@
+ service->opts |= SERV_NOTLSB;
+ if (script_inf.required_start && script_inf.required_start != empty) {
+ rememberreq(service, REQ_MUST, script_inf.required_start);
+- requiresv(token, script_inf.required_start);
+ }
+ if (script_inf.should_start && script_inf.should_start != empty) {
+ rememberreq(service, REQ_SHLD, script_inf.should_start);
+- requiresv(token, script_inf.should_start);
+ }
+ if (script_inf.start_before && script_inf.start_before != empty) {
+- reversereq(service, token, script_inf.start_before);
++ reversereq(service, REQ_SHLD, script_inf.start_before);
+ }
+ #ifndef SUSE
+ /*
+@@ -1367,19 +1373,16 @@
+ * The stop_order is given by max_order + 1 - start_order.
+ */
+ if (script_inf.required_stop && script_inf.required_stop != empty) {
+- rememberreq(service, REQ_MUST, script_inf.required_stop);
+- requiresv(token, script_inf.required_stop);
++ reversereq(service, REQ_MUST, script_inf.required_stop);
+ }
+ if (script_inf.should_stop && script_inf.should_stop != empty) {
+- rememberreq(service, REQ_SHLD, script_inf.should_stop);
+- requiresv(token, script_inf.should_stop);
++ reversereq(service, REQ_SHLD, script_inf.should_stop);
+ }
+ if (script_inf.stop_after && script_inf.stop_after != empty) {
+- reversereq(service, token, script_inf.stop_after);
++ rememberreq(service, REQ_SHLD, script_inf.stop_after);
+ }
+ #endif /* not SUSE */
+ }
+- script_inf.provides = begin;
+
+ xreset(script_inf.provides);
+ xreset(script_inf.required_start);
+@@ -1905,7 +1908,6 @@
+ serv_t *serv = addserv("single");
+ makeprov("single", d->d_name);
+ runlevels("single", "1 S");
+- requiresv("single", "kbd");
+ serv->opts |= SERV_ALL;
+ rememberreq(serv, REQ_SHLD, "kbd");
+ continue;
+@@ -1981,7 +1983,7 @@
+ char * provides = xstrdup(script_inf.provides);
+
+ begin = provides;
+- while ((token = strsep(&provides, delimeter)) && *token) {
++ while ((token = strsep(&begin, delimeter)) && *token) {
+
+ if (*token == '$') {
+ warn("script %s provides system facility %s, skipped!\n", d->d_name, token);
+@@ -2016,7 +2018,7 @@
+ boolean known = (service->opts & SERV_KNOWN);
+ service->opts |= SERV_KNOWN;
+
+- if ((!provides || !*provides) && (count > 1)) { /* Last token */
++ if ((!begin || !*begin) && (count > 1)) { /* Last token */
+ const char * script = getscript(service->name);
+
+ if (script) {
+@@ -2040,11 +2042,9 @@
+ if (!known) {
+ if (script_inf.required_start && script_inf.required_start != empty) {
+ rememberreq(service, REQ_MUST, script_inf.required_start);
+- requiresv(token, script_inf.required_start);
+ }
+ if (script_inf.should_start && script_inf.should_start != empty) {
+ rememberreq(service, REQ_SHLD, script_inf.should_start);
+- requiresv(token, script_inf.should_start);
+ }
+ #ifndef SUSE
+ /*
+@@ -2053,21 +2053,21 @@
+ * The stop order is given by max order - start order.
+ */
+ if (script_inf.required_stop && script_inf.required_stop != empty) {
+- rememberreq(service, REQ_MUST, script_inf.required_stop);
+- requiresv(token, script_inf.required_stop);
++ reversereq(service, REQ_MUST, script_inf.required_stop);
+ }
+ if (script_inf.should_stop && script_inf.should_stop != empty) {
+- rememberreq(service, REQ_SHLD, script_inf.should_stop);
+- requiresv(token, script_inf.should_stop);
++ reversereq(service, REQ_SHLD, script_inf.should_stop);
+ }
+ #endif /* not SUSE */
++
+ }
++
+ if (script_inf.start_before && script_inf.start_before != empty) {
+- reversereq(service, token, script_inf.start_before);
++ reversereq(service, REQ_SHLD, script_inf.start_before);
+ }
+ #ifndef SUSE
+ if (script_inf.stop_after && script_inf.stop_after != empty) {
+- reversereq(service, token, script_inf.stop_after);
++ rememberreq(service, REQ_SHLD, script_inf.stop_after);
+ }
+ #endif /* not SUSE */
+ /*
+@@ -2161,7 +2161,7 @@
+ #endif /* not SUSE */
+ }
+ }
+- free(begin);
++ free(provides);
+ }
+
+ #ifdef SUSE
Modified: trunk/src/insserv/debian/patches/51_fakeloop_thinko.dpatch
URL: http://svn.debian.org/wsvn/initscripts-ng/trunk/src/insserv/debian/patches/51_fakeloop_thinko.dpatch?rev=550&op=diff
==============================================================================
--- trunk/src/insserv/debian/patches/51_fakeloop_thinko.dpatch (original)
+++ trunk/src/insserv/debian/patches/51_fakeloop_thinko.dpatch Wed Jan 23 09:30:52 2008
@@ -4,9 +4,55 @@
Patch from Werner Fink to try to fix the problem with fake loops.
@DPATCH@
---- insserv-1.10.0/insserv.c
-+++ insserv-1.10.0/insserv.c 2008-01-07 17:13:27.696866603 +0100
-@@ -1335,7 +1335,7 @@ static void scan_script_locations(const
+--- insserv.c
++++ insserv.c 2008-01-21 17:48:25.413323708 +0100
+@@ -360,31 +360,39 @@ static void rememberreq(serv_t *serv, un
+ }
+ }
+
+-static void reversereq(const serv_t * serv, const char * token, const char * list)
++static void reversereq(const serv_t * serv, unsigned int bit, const char * list)
+ {
+ const char * dep;
+ char * rev = strdupa(list);
++ unsigned int old = bit;
+
+ while ((dep = strsep(&rev, delimeter)) && *dep) {
+ serv_t * tmp;
+ list_t * ptr;
+
++ if (!*dep)
++ continue;
++
++ bit = old;
++
+ switch (*dep) {
+ case '+':
+ dep++;
++ bit = REQ_SHLD;
+ default:
+- if ((tmp = findserv(dep))) {
++ if (!(tmp = findserv(dep)))
++ tmp = addserv(dep);
++ if (tmp) {
+ const char * name;
+ if ((name = getscript(serv->name)) == (char*)0)
+- name = serv->name;
+- rememberreq(tmp, REQ_SHLD, name);
++ name = serv->name;
++ rememberreq(tmp, bit, name);
+ }
+- requiresv(dep, token);
+ break;
+ case '$':
+ list_for_each(ptr, sysfaci_start) {
+ if (!strcmp(dep, getfaci(ptr)->name)) {
+- reversereq(serv, token, getfaci(ptr)->repl);
++ reversereq(serv, bit, getfaci(ptr)->repl);
+ break;
+ }
+ }
+@@ -1335,7 +1343,7 @@ static void scan_script_locations(const
script_inf.provides = xstrdup(ptr);
begin = script_inf.provides;
@@ -15,90 +61,60 @@
serv_t * service = (serv_t*)0;
if (*token == '$') {
warn("script %s provides system facility %s, skipped!\n", d->d_name, token);
-@@ -1360,26 +1360,66 @@ static void scan_script_locations(const
+@@ -1346,19 +1354,17 @@ static void scan_script_locations(const
+ if (service->opts & SERV_KNOWN)
+ continue;
+ service->opts |= (SERV_KNOWN|SERV_ENABLED);
+-
+ if (!lsb)
+ service->opts |= SERV_NOTLSB;
++
+ if (script_inf.required_start && script_inf.required_start != empty) {
+ rememberreq(service, REQ_MUST, script_inf.required_start);
+- requiresv(token, script_inf.required_start);
+ }
+ if (script_inf.should_start && script_inf.should_start != empty) {
+ rememberreq(service, REQ_SHLD, script_inf.should_start);
+- requiresv(token, script_inf.should_start);
+ }
if (script_inf.start_before && script_inf.start_before != empty) {
- reversereq(service, token, script_inf.start_before);
+- reversereq(service, token, script_inf.start_before);
++ reversereq(service, REQ_SHLD, script_inf.start_before);
}
-+ }
#ifndef SUSE
-- /*
-- * required_stop and should_stop arn't used in SuSE Linux.
-- * Note: Sorting is done symetrical in stop and start!
-- * The stop_order is given by max_order + 1 - start_order.
-- */
-- if (script_inf.required_stop && script_inf.required_stop != empty) {
+ /*
+@@ -1367,19 +1373,16 @@ static void scan_script_locations(const
+ * The stop_order is given by max_order + 1 - start_order.
+ */
+ if (script_inf.required_stop && script_inf.required_stop != empty) {
- rememberreq(service, REQ_MUST, script_inf.required_stop);
- requiresv(token, script_inf.required_stop);
-- }
-- if (script_inf.should_stop && script_inf.should_stop != empty) {
++ reversereq(service, REQ_MUST, script_inf.required_stop);
+ }
+ if (script_inf.should_stop && script_inf.should_stop != empty) {
- rememberreq(service, REQ_SHLD, script_inf.should_stop);
- requiresv(token, script_inf.should_stop);
-+ /*
-+ * required_stop and should_stop arn't used in SuSE Linux.
-+ * Note: Sorting is done symetrical in stop and start!
-+ * The stop_order is given by max_order + 1 - start_order.
-+ */
-+ begin = script_inf.required_stop;
-+ while ((token = strsep(&begin, delimeter)) && *token) {
-+ serv_t * service = (serv_t*)0;
-+ if (*token == '$') {
-+ warn("script %s provides system facility %s, skipped!\n", d->d_name, token);
-+ continue;
++ reversereq(service, REQ_SHLD, script_inf.should_stop);
}
-- if (script_inf.stop_after && script_inf.stop_after != empty) {
+ if (script_inf.stop_after && script_inf.stop_after != empty) {
- reversereq(service, token, script_inf.stop_after);
-+ if (!(service = findserv(token)))
-+ service = addserv(token);
-+ if (!service)
-+ continue;
-+
-+ if (script_inf.provides && script_inf.provides != empty) {
-+ rememberreq(service, REQ_MUST, script_inf.provides);
-+ requiresv(token, script_inf.provides);
++ rememberreq(service, REQ_SHLD, script_inf.stop_after);
}
--#endif /* not SUSE */
+ #endif /* not SUSE */
}
- script_inf.provides = begin;
-+
-+ begin = script_inf.required_stop;
-+ while ((token = strsep(&begin, delimeter)) && *token) {
-+ serv_t * service = (serv_t*)0;
-+ if (*token == '$') {
-+ warn("script %s provides system facility %s, skipped!\n", d->d_name, token);
-+ continue;
-+ }
-+ if (!(service = findserv(token)))
-+ service = addserv(token);
-+ if (!service)
-+ continue;
-+
-+ if (script_inf.provides && script_inf.provides != empty) {
-+ rememberreq(service, REQ_SHLD, script_inf.provides);
-+ requiresv(token, script_inf.provides);
-+ }
-+ }
-+
-+ begin = script_inf.stop_after;
-+ while ((token = strsep(&begin, delimeter)) && *token) {
-+ serv_t * service = (serv_t*)0;
-+ if (*token == '$') {
-+ warn("script %s provides system facility %s, skipped!\n", d->d_name, token);
-+ continue;
-+ }
-+ if (!(service = findserv(token)))
-+ service = addserv(token);
-+ if (!service)
-+ continue;
-+
-+ if (script_inf.provides && script_inf.provides != empty) {
-+ reversereq(service, token, script_inf.provides);
-+ }
-+ }
-+#endif /* not SUSE */
xreset(script_inf.provides);
xreset(script_inf.required_start);
-@@ -1981,7 +2021,7 @@ int main (int argc, char *argv[])
+@@ -1905,7 +1908,6 @@ int main (int argc, char *argv[])
+ serv_t *serv = addserv("single");
+ makeprov("single", d->d_name);
+ runlevels("single", "1 S");
+- requiresv("single", "kbd");
+ serv->opts |= SERV_ALL;
+ rememberreq(serv, REQ_SHLD, "kbd");
+ continue;
+@@ -1981,7 +1983,7 @@ int main (int argc, char *argv[])
char * provides = xstrdup(script_inf.provides);
begin = provides;
@@ -107,7 +123,7 @@
if (*token == '$') {
warn("script %s provides system facility %s, skipped!\n", d->d_name, token);
-@@ -2016,7 +2056,7 @@ int main (int argc, char *argv[])
+@@ -2016,7 +2018,7 @@ int main (int argc, char *argv[])
boolean known = (service->opts & SERV_KNOWN);
service->opts |= SERV_KNOWN;
@@ -116,103 +132,51 @@
const char * script = getscript(service->name);
if (script) {
-@@ -2046,30 +2086,12 @@ int main (int argc, char *argv[])
+@@ -2040,11 +2042,9 @@ int main (int argc, char *argv[])
+ if (!known) {
+ if (script_inf.required_start && script_inf.required_start != empty) {
+ rememberreq(service, REQ_MUST, script_inf.required_start);
+- requiresv(token, script_inf.required_start);
+ }
+ if (script_inf.should_start && script_inf.should_start != empty) {
rememberreq(service, REQ_SHLD, script_inf.should_start);
- requiresv(token, script_inf.should_start);
+- requiresv(token, script_inf.should_start);
}
--#ifndef SUSE
-- /*
-- * required_stop and should_stop arn't used in SuSE Linux.
-- * Note: Sorting is done symetrical in stop and start!
-- * The stop order is given by max order - start order.
-- */
-- if (script_inf.required_stop && script_inf.required_stop != empty) {
+ #ifndef SUSE
+ /*
+@@ -2053,21 +2053,21 @@ int main (int argc, char *argv[])
+ * The stop order is given by max order - start order.
+ */
+ if (script_inf.required_stop && script_inf.required_stop != empty) {
- rememberreq(service, REQ_MUST, script_inf.required_stop);
- requiresv(token, script_inf.required_stop);
-- }
-- if (script_inf.should_stop && script_inf.should_stop != empty) {
++ reversereq(service, REQ_MUST, script_inf.required_stop);
+ }
+ if (script_inf.should_stop && script_inf.should_stop != empty) {
- rememberreq(service, REQ_SHLD, script_inf.should_stop);
- requiresv(token, script_inf.should_stop);
-- }
--#endif /* not SUSE */
++ reversereq(service, REQ_SHLD, script_inf.should_stop);
+ }
+ #endif /* not SUSE */
++
}
+
if (script_inf.start_before && script_inf.start_before != empty) {
- reversereq(service, token, script_inf.start_before);
+- reversereq(service, token, script_inf.start_before);
++ reversereq(service, REQ_SHLD, script_inf.start_before);
}
--#ifndef SUSE
-- if (script_inf.stop_after && script_inf.stop_after != empty) {
+ #ifndef SUSE
+ if (script_inf.stop_after && script_inf.stop_after != empty) {
- reversereq(service, token, script_inf.stop_after);
-- }
--#endif /* not SUSE */
-+
++ rememberreq(service, REQ_SHLD, script_inf.stop_after);
+ }
+ #endif /* not SUSE */
/*
- * Use information from symbolic link structure to
- * check if all services are around for this script.
-@@ -2161,7 +2183,66 @@ int main (int argc, char *argv[])
+@@ -2161,7 +2161,7 @@ int main (int argc, char *argv[])
#endif /* not SUSE */
}
}
- free(begin);
-+#ifndef SUSE
-+ /*
-+ * required_stop and should_stop arn't used in SuSE Linux.
-+ * Note: Sorting is done symetrical in stop and start!
-+ * The stop order is given by max order - start order.
-+ */
-+ begin = script_inf.required_stop;
-+ while ((token = strsep(&begin, delimeter)) && *token) {
-+ serv_t * this = (serv_t*)0;
-+ if (*token == '$') {
-+ warn("script %s provides system facility %s, skipped!\n", d->d_name, token);
-+ continue;
-+ }
-+ if (!(this = findserv(token)))
-+ this = addserv(token);
-+ if (!this)
-+ continue;
-+
-+ if (provides && provides != empty) {
-+ rememberreq(this, REQ_MUST, provides);
-+ requiresv(token, provides);
-+ }
-+ }
-+
-+ begin = script_inf.should_stop;
-+ while ((token = strsep(&begin, delimeter)) && *token) {
-+ serv_t * this = (serv_t*)0;
-+ if (*token == '$') {
-+ warn("script %s provides system facility %s, skipped!\n", d->d_name, token);
-+ continue;
-+ }
-+ if (!(this = findserv(token)))
-+ this = addserv(token);
-+ if (!this)
-+ continue;
-+
-+ if (provides && provides != empty) {
-+ rememberreq(this, REQ_SHLD, provides);
-+ requiresv(token, provides);
-+ }
-+ }
-+
-+ begin = script_inf.stop_after;
-+ while ((token = strsep(&begin, delimeter)) && *token) {
-+ serv_t * this = (serv_t*)0;
-+ if (*token == '$') {
-+ warn("script %s provides system facility %s, skipped!\n", d->d_name, token);
-+ continue;
-+ }
-+ if (!(this = findserv(token)))
-+ this = addserv(token);
-+ if (!this)
-+ continue;
-+
-+ if (provides && provides != empty) {
-+ reversereq(this, token, provides);
-+ }
-+ }
-+#endif /* not SUSE */
+ free(provides);
}
More information about the Initscripts-ng-commits
mailing list