diff options
Diffstat (limited to 'app-arch/star/files/star-1.5.1-changewarnSegv.patch')
-rw-r--r-- | app-arch/star/files/star-1.5.1-changewarnSegv.patch | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/app-arch/star/files/star-1.5.1-changewarnSegv.patch b/app-arch/star/files/star-1.5.1-changewarnSegv.patch new file mode 100644 index 000000000000..74d4870d5555 --- /dev/null +++ b/app-arch/star/files/star-1.5.1-changewarnSegv.patch @@ -0,0 +1,80 @@ +--- star-1.5/star/checkerr.c.orig-segv 2006-10-31 18:06:25.000000000 +0100 ++++ star-1.5/star/checkerr.c 2007-08-27 11:42:39.000000000 +0200 +@@ -183,39 +183,45 @@ LOCAL struct eflags { + */ + LOCAL UInt32_t + errflags(eflag, doexit) +- char *eflag; +- BOOL doexit; ++ char *eflag; ++ BOOL doexit; + { +- register char *p = eflag; +- char *ef = _endword(eflag); +- register struct eflags *ep; +- register int slen; +- register UInt32_t nflags = 0; +- +- do { +- for (ep = eflags; ep->fname; ep++) { +- slen = strlen(ep->fname); +- if ((strncmp(ep->fname, p, slen) == 0) && +- (p[slen] == '|' || p[slen] == ' ' || +- p[slen] == '\0')) { +- nflags |= ep->fval; +- break; +- } +- } +- if (ep->fname == NULL) { +- if (doexit) +- comerrno(EX_BAD, "Bad flag '%s'\n", p); +- return (0); +- } +- p = strchr(p, '|'); +- } while (p < ef && p && *p++ == '|'); +- +- if ((nflags & ~(UInt32_t)(E_ABORT|E_WARN)) == 0) { +- if (doexit) +- comerrno(EX_BAD, "Bad error condition '%s'.\n", eflag); +- return (0); +- } +- return (nflags); ++ register struct eflags *ep; ++ register int slen; ++ register UInt32_t nflags = 0; ++ char *curflags; ++ char *curflag; ++ ++ curflags = strdup (eflag); ++ *_endword(curflags) = '\0'; ++ curflag = strtok (curflags, "|"); ++ ++ while (curflag != NULL) { ++ for (ep = eflags; ep->fname; ep++) { ++ slen = strlen (ep->fname); ++ if ((strncmp (ep->fname, curflag, slen)) == 0) { ++ nflags |= ep->fval; ++ goto next; ++ } ++ } ++ ++ if (doexit) ++ comerrno (EX_BAD, "Bad flag '%s' \n", curflag); ++ ++ free (curflags); ++ return (0); ++ next: ++ curflag = strtok (NULL, "|"); ++ } ++ ++ free (curflags); ++ ++ if ((nflags & ~(UInt32_t)(E_ABORT|E_WARN)) == 0) { ++ if (doexit) ++ comerrno(EX_BAD, "Bad error condition '%s'.\n", eflag); ++ return (0); ++ } ++ return (nflags); + } + + LOCAL ec_t * |