git-svn-id: https://svn.o-hand.com/repos/poky/trunk@4830 311d38ba-8fff-0310-9ca6-ca027cbcb966
90 lines
3.5 KiB
Text
90 lines
3.5 KiB
Text
#! /bin/sh /usr/share/dpatch/dpatch-run
|
|
## 40_segfault_virtprov.dpatch by Petter Reinholdtsen
|
|
|
|
Avoid segfault when an enabled service provide a virtual system
|
|
facility.
|
|
|
|
@DPATCH@
|
|
--- insserv/insserv.c
|
|
+++ insserv/insserv.c 2008-02-01 11:43:45.634618329 +0100
|
|
@@ -166,7 +166,7 @@ typedef struct pwd_struct {
|
|
|
|
static list_t pwd = { &(pwd), &(pwd) }, * topd = &(pwd);
|
|
|
|
-static void pushd(const char *const __restrict path);
|
|
+static void pushd(const char *const __restrict path) __attribute__((nonnull(1)));
|
|
static void pushd(const char *const path)
|
|
{
|
|
pwd_t * dir;
|
|
@@ -305,13 +305,13 @@ out:
|
|
return getserv(ptr);
|
|
}
|
|
|
|
-static serv_t * findserv(const char *const __restrict serv) __attribute__((nonnull(1)));
|
|
+static serv_t * findserv(const char *const __restrict serv);
|
|
static serv_t * findserv(const char *const serv)
|
|
{
|
|
list_t * ptr;
|
|
serv_t * ret = (serv_t*)0;
|
|
|
|
- if (!serv)
|
|
+ if (serv == (const char*)0)
|
|
goto out;
|
|
|
|
list_for_each(ptr, serv_start) {
|
|
@@ -334,6 +334,9 @@ static void rememberreq(serv_t *serv, ui
|
|
list_t * ptr;
|
|
uint old = bit;
|
|
|
|
+ if (!tmp)
|
|
+ error("%s", strerror(errno));
|
|
+
|
|
while ((token = strsep(&tmp, delimeter))) {
|
|
boolean found = false;
|
|
req_t * this;
|
|
@@ -399,6 +402,9 @@ static void reversereq(const serv_t * se
|
|
char * rev = strdupa(list);
|
|
uint old = bit;
|
|
|
|
+ if (!rev)
|
|
+ error("%s", strerror(errno));
|
|
+
|
|
while ((dep = strsep(&rev, delimeter)) && *dep) {
|
|
serv_t * tmp;
|
|
list_t * ptr;
|
|
@@ -437,7 +443,7 @@ static void reversereq(const serv_t * se
|
|
/*
|
|
* Check required services for name
|
|
*/
|
|
-static boolean chkrequired(const char *const __restrict name) __attribute__((nonnull(1)));
|
|
+static boolean chkrequired(const char *const __restrict name);
|
|
static boolean chkrequired(const char *const name)
|
|
{
|
|
serv_t * serv = findserv(name);
|
|
--- insserv/listing.h
|
|
+++ insserv/listing.h 2008-02-01 11:40:45.347748072 +0100
|
|
@@ -97,11 +97,11 @@ extern int makeprov(const char *__restri
|
|
extern void setorder(const char *__restrict script, const int order, boolean recursive) __attribute__((nonnull(1)));
|
|
extern int getorder(const char *__restrict script) __attribute__((nonnull(1)));
|
|
extern boolean notincluded(const char *__restrict script, const int runlevel) __attribute__((nonnull(1)));
|
|
-extern boolean foreach(const char **__restrict script, int *__restrict order, const int runlevel) __attribute__((nonnull(1,2)));
|
|
-extern void virtprov(const char *__restrict virt, const char *__restrict real) __attribute__((nonnull(1,2)));
|
|
+extern boolean foreach(const char **__restrict script, int *__restrict order, const int runlevel) __attribute__((nonnull(2)));
|
|
+extern void virtprov(const char *__restrict virt, const char *__restrict real) __attribute__((nonnull(1)));
|
|
extern const char * getscript(const char *__restrict prov) __attribute__((nonnull(1)));
|
|
extern const char * getprovides(const char *__restrict script) __attribute__((nonnull(1)));
|
|
-extern boolean listscripts(const char **__restrict script, const int lvl) __attribute__((nonnull(1)));
|
|
+extern boolean listscripts(const char **__restrict script, const int lvl);
|
|
extern int maxorder;
|
|
extern boolean is_loop_detected(void);
|
|
|
|
@@ -116,7 +116,7 @@ extern int map_has_runlevels(void);
|
|
extern int map_runlevel_to_lvl (const int runlevel);
|
|
extern int map_key_to_lvl(const char key);
|
|
|
|
-static inline char * xstrdup(const char *__restrict s) __attribute__((always_inline,nonnull(1)));
|
|
+static inline char * xstrdup(const char *__restrict s) __attribute__((always_inline));
|
|
static inline char * xstrdup(const char * s)
|
|
{
|
|
char * r;
|