Group :: Editors
RPM: minised
Main Changelog Spec Patches Sources Download Gear Bugs and FR Repocop
Patch: minised-svn-r106.patch
Download
Download
Makefile | 15 ++++++++++++---
sedcomp.c | 42 +++++++++++++++++++++++++-----------------
sedexec.c | 54 +++++++++++++++++++++++++++---------------------------
tests/run | 6 +++---
4 files changed, 67 insertions(+), 50 deletions(-)
diff --git a/Makefile b/Makefile
index a7d387a..24ac2a4 100644
--- a/Makefile
+++ b/Makefile
@@ -1,16 +1,24 @@
# Makefile for minised
+# If your compiler does not support this flags, just remove them.
+# They only ensure that no new warning regressions make it into the source.
+CFLAGS += -Wall -Wwrite-strings
+
+DESTDIR=
PREFIX=/usr
+BINDIR=$(PREFIX)/bin
+MANDIR=$(PREFIX)/share/man/man1
minised: sedcomp.o sedexec.o
- $(CC) $(LFLAGS) sedcomp.o sedexec.o -o minised
+ $(CC) $(LDFLAGS) sedcomp.o sedexec.o -o minised
sedcomp.o: sedcomp.c sed.h
sedexec.o: sedexec.c sed.h
install:
- install minised $(PREFIX)/bin/
- install minised.1 $(PREFIX)/man/man1/
+ install -d -m 755 $(DESTDIR)$(BINDIR) $(DESTDIR)$(MANDIR)
+ install -m 755 minised $(DESTDIR)$(BINDIR)
+ install -m 644 minised.1 $(DESTDIR)$(MANDIR)
clean:
rm -f minised sedcomp.o sedexec.o
@@ -18,3 +26,4 @@ clean:
check: minised
cd tests; ./run ../minised
+.PHONY: install clean check
diff --git a/sedcomp.c b/sedcomp.c
index 70c662f..95eb8c5 100644
--- a/sedcomp.c
+++ b/sedcomp.c
@@ -65,7 +65,7 @@ static char AD2NG[] = "only one address allowed for %s";
static char TMCDS[] = "too many commands, last was %s";
static char COCFI[] = "cannot open command-file %s";
static char UFLAG[] = "unknown flag %c";
-static char COOFI[] = "cannot open %s";
+/*static char COOFI[] = "cannot open %s";*/
static char CCOFI[] = "cannot create %s";
static char ULABL[] = "undefined label %s";
static char TMLBR[] = "too many {'s";
@@ -82,7 +82,7 @@ static char RETER[] = "RE not terminated: %s";
static char CCERR[] = "unknown character class: %s";
/* cclass to c function mapping ,-) */
-char* cclasses[] = {
+const char* cclasses[] = {
"alnum", "a-zA-Z0-9",
"lower", "a-z",
"space", " \f\n\r\t\v",
@@ -297,11 +297,14 @@ static void compile(void)
SKIPWS(cp); /* look for trailing stuff */
if (*cp != '\0')
- if (*cp == ';') {
+ {
+ if (*cp == ';')
+ {
continue;
}
else if (*cp != '#' && *cp != '}')
die(TRAIL);
+ }
}
}
@@ -309,7 +312,7 @@ static void compile(void)
static int cmdcomp(char cchar)
{
static sedcmd **cmpstk[MAXDEPTH]; /* current cmd stack for {} */
- static char *fname[WFILES]; /* w file name pointers */
+ static const char *fname[WFILES]; /* w file name pointers */
static FILE *fout[WFILES]; /* w file file ptrs */
static int nwfiles = 2; /* count of open w files */
int i; /* indexing dummy used in w */
@@ -346,7 +349,7 @@ static int cmdcomp(char cchar)
case ':': /* label declaration */
if (cmdp->addr1) die(AD1NG); /* no addresses allowed */
fp = gettext(lab->name = fp); /* get the label name */
- if (lpt = search(lab)) /* does it have a double? */
+ if ((lpt = search(lab))) /* does it have a double? */
{
if (lpt->address) die(DLABL); /* yes, abort */
}
@@ -366,9 +369,9 @@ static int cmdcomp(char cchar)
if (*cp == '\0') /* if branch is to start of cmds... */
{
/* add current command to end of label last */
- if (sp1 = lablst->last)
+ if ((sp1 = lablst->last))
{
- while(sp2 = sp1->u.link)
+ while((sp2 = sp1->u.link))
sp1 = sp2;
sp1->u.link = cmdp;
}
@@ -377,14 +380,14 @@ static int cmdcomp(char cchar)
break;
}
fp = gettext(lab->name = fp); /* else get label into pool */
- if (lpt = search(lab)) /* enter branch to it */
+ if ((lpt = search(lab))) /* enter branch to it */
{
if (lpt->address)
cmdp->u.link = lpt->address;
else
{
sp1 = lpt->last;
- while(sp2 = sp1->u.link)
+ while((sp2 = sp1->u.link))
sp1 = sp2;
sp1->u.link = cmdp;
}
@@ -458,7 +461,8 @@ static int cmdcomp(char cchar)
case 'w': /* write-pattern-space command */
case 'W': /* write-first-line command */
if (nwfiles >= WFILES) die(TMWFI);
- fp=gettext(fname[nwfiles]=fp); /* filename will be in pool */
+ fname[nwfiles] = fp;
+ fp = gettext((fname[nwfiles] = fp, fp)); /* filename will be in pool */
for(i = nwfiles-1; i >= 0; i--) /* match it in table */
if (strcmp(fname[nwfiles], fname[i]) == 0)
{
@@ -555,7 +559,7 @@ static char *recomp(char *expbuf, char redelim) /* uses cp, bcount */
brnestp = brnest; /* initialize ptr to brnest array */
tags = bcount = 0; /* initialize counters */
- if (*ep++ = (*sp == '^')) /* check for start-of-line syntax */
+ if ((*ep++ = (*sp == '^'))) /* check for start-of-line syntax */
sp++;
for (;;)
@@ -656,7 +660,7 @@ static char *recomp(char *expbuf, char redelim) /* uses cp, bcount */
if (ep + 17 >= expbuf + RELIMIT)
die(REITL);
*ep++ = CCL; /* insert class mark */
- if (negclass = ((c = *sp++) == '^'))
+ if ((negclass = ((c = *sp++) == '^')))
c = *sp++;
svclass = sp; /* save ptr to class start */
do {
@@ -665,13 +669,15 @@ static char *recomp(char *expbuf, char redelim) /* uses cp, bcount */
if (c == '[' && *sp == ':')
{
/* look for the matching ":]]" */
- char *p, *p2;
+ char *p;
+ const char *p2;
for (p = sp+3; *p; p++)
if (*p == ']' &&
*(p-1) == ']' &&
*(p-2) == ':')
{
- char cc[8], **it;
+ char cc[8];
+ const char **it;
p2 = sp+1;
for (p2 = sp+1;
p2 < p-2 && p2-sp-1 < sizeof(cc);
@@ -709,12 +715,14 @@ static char *recomp(char *expbuf, char redelim) /* uses cp, bcount */
/* handle escape sequences in sets */
if (c == '\\')
+ {
if ((c = *sp++) == 'n')
c = '\n';
else if (c == 't')
c = '\t';
else if (c == 'r')
c = '\r';
+ }
/* enter (possibly translated) char in set */
if (c)
@@ -759,7 +767,7 @@ static int cmdline(char *cbuf) /* uses eflag, eargc, cmdf */
/* else transcribe next e argument into cbuf */
p = *++eargv;
- while(*++cbuf = *p++)
+ while((*++cbuf = *p++))
if (*cbuf == '\\')
{
if ((*++cbuf = *p++) == '\0')
@@ -781,7 +789,7 @@ static int cmdline(char *cbuf) /* uses eflag, eargc, cmdf */
if ((p = savep) == NULL)
return(-1);
- while(*++cbuf = *p++)
+ while((*++cbuf = *p++))
if (*cbuf == '\\')
{
if ((*++cbuf = *p++) == '0')
@@ -889,7 +897,7 @@ static void resolve(void) /* uses global lablst */
else if (lptr->last) /* if last is non-null */
{
rptr = lptr->last; /* chase it */
- while(trptr = rptr->u.link) /* resolve refs */
+ while((trptr = rptr->u.link)) /* resolve refs */
{
rptr->u.link = lptr->address;
rptr = trptr;
diff --git a/sedexec.c b/sedexec.c
index fcc874e..236d3df 100644
--- a/sedexec.c
+++ b/sedexec.c
@@ -156,7 +156,7 @@ static int selected(sedcmd *ipc)
{
register char *p1 = ipc->addr1; /* point p1 at first address */
register char *p2 = ipc->addr2; /* and p2 at second */
- char c;
+ unsigned char c;
int selected = FALSE;
if (ipc->flags.inrange)
@@ -206,7 +206,7 @@ static int match(char *expbuf, int gf) /* uses genbuf */
if (*expbuf)
return(FALSE);
p1 = linebuf; p2 = genbuf;
- while (*p1++ = *p2++);
+ while ((*p1++ = *p2++));
if (needs_advance) {
loc2++;
}
@@ -297,7 +297,7 @@ static int advance(char* lp, char* ep, char** eob)
return(FALSE); /* else return false */
case CBRA: /* start of tagged pattern */
- brastart[*ep++] = lp; /* mark it */
+ brastart[(unsigned char)*ep++] = lp; /* mark it */
continue; /* and go */
case CKET: /* end of tagged pattern */
@@ -307,12 +307,12 @@ static int advance(char* lp, char* ep, char** eob)
return (TRUE);
}
else
- bracend[*ep++] = lp; /* mark it */
+ bracend[(unsigned char)*ep++] = lp; /* mark it */
continue; /* and go */
case CBACK: /* match back reference */
- bbeg = brastart[*ep];
- ct = bracend[*ep++] - bbeg;
+ bbeg = brastart[(unsigned char)*ep];
+ ct = bracend[(unsigned char)*ep++] - bbeg;
if (memcmp(bbeg, lp, ct) == 0)
{
@@ -327,12 +327,12 @@ static int advance(char* lp, char* ep, char** eob)
curlp = lp;
if (*ep > bcount)
- brastart[*ep] = bracend[*ep] = lp;
+ brastart[(unsigned char)*ep] = bracend[(unsigned char)*ep] = lp;
while (advance(lastlp=lp, ep+1, &lp)) {
if (*ep > bcount && lp != lastlp) {
- bracend[*ep] = lp; /* mark it */
- brastart[*ep] = lastlp;
+ bracend[(unsigned char)*ep] = lp; /* mark it */
+ brastart[(unsigned char)*ep] = lastlp;
}
if (lp == lastlp) break;
}
@@ -350,8 +350,8 @@ static int advance(char* lp, char* ep, char** eob)
goto star;
}
case CBACK|STAR: /* \n* */
- bbeg = brastart[*ep];
- ct = bracend[*ep++] - bbeg;
+ bbeg = brastart[(unsigned char)*ep];
+ ct = bracend[(unsigned char)*ep++] - bbeg;
curlp = lp;
while(memcmp(bbeg, lp, ct) == 0)
lp += ct;
@@ -436,7 +436,7 @@ static int advance(char* lp, char* ep, char** eob)
ipc: ptr to s command struct */
static int substitute(sedcmd *ipc)
{
- int n = 1;
+ unsigned int n = 1;
/* find a match */
/* the needs_advance code got a bit tricky - might needs a clean
refactoring */
@@ -474,7 +474,7 @@ static void dosub(char *rhsbuf) /* uses linebuf, genbuf, spend */
lp = linebuf; sp = genbuf;
while (lp < loc1) *sp++ = *lp++;
- for (rp = rhsbuf; c = *rp++; )
+ for (rp = rhsbuf; (c = *rp++); )
{
if (c & 0200 && (c & 0177) == '0')
{
@@ -493,11 +493,11 @@ static void dosub(char *rhsbuf) /* uses linebuf, genbuf, spend */
}
lp = loc2;
loc2 = sp - genbuf + linebuf;
- while (*sp++ = *lp++)
+ while ((*sp++ = *lp++))
if (sp >= genbuf + MAXBUF)
fprintf(stderr, LTLMSG);
lp = linebuf; sp = genbuf;
- while (*lp++ = *sp++);
+ while ((*lp++ = *sp++));
spend = lp-1;
}
@@ -594,10 +594,10 @@ static void command(sedcmd *ipc)
case CDCMD: /* delete a line in hold space */
p1 = p2 = linebuf;
while(*p1 != '\n')
- if (delete = (*p1++ == 0))
+ if ((delete = (*p1++ == 0)))
return;
p1++;
- while(*p2++ = *p1++) continue;
+ while((*p2++ = *p1++)) continue;
spend = p2-1;
jump++;
break;
@@ -607,7 +607,7 @@ static void command(sedcmd *ipc)
break;
case GCMD: /* copy hold space to pattern space */
- p1 = linebuf; p2 = holdsp; while(*p1++ = *p2++);
+ p1 = linebuf; p2 = holdsp; while((*p1++ = *p2++));
spend = p1-1;
break;
@@ -620,14 +620,13 @@ static void command(sedcmd *ipc)
p1[-1] = 0;
break;
}
- } while
- (*p1++ = *p2++);
+ } while((*p1++ = *p2++));
spend = p1-1;
break;
case HCMD: /* copy pattern space to hold space */
- p1 = holdsp; p2 = linebuf; while(*p1++ = *p2++);
+ p1 = holdsp; p2 = linebuf; while((*p1++ = *p2++));
hspend = p1-1;
break;
@@ -640,8 +639,7 @@ static void command(sedcmd *ipc)
p1[-1] = 0;
break;
}
- } while
- (*p1++ = *p2++);
+ } while((*p1++ = *p2++));
hspend = p1-1;
break;
@@ -718,10 +716,12 @@ static void command(sedcmd *ipc)
case SCMD: /* substitute RE */
didsub = substitute(ipc);
if (ipc->flags.print && didsub)
+ {
if (ipc->flags.print == TRUE)
puts(linebuf);
else
goto cpcom;
+ }
if (didsub && ipc->fout)
fprintf(ipc->fout, "%s\n", linebuf);
break;
@@ -745,16 +745,16 @@ static void command(sedcmd *ipc)
break;
case XCMD: /* exchange pattern and hold spaces */
- p1 = linebuf; p2 = genbuf; while(*p2++ = *p1++) continue;
- p1 = holdsp; p2 = linebuf; while(*p2++ = *p1++) continue;
+ p1 = linebuf; p2 = genbuf; while((*p2++ = *p1++)) continue;
+ p1 = holdsp; p2 = linebuf; while((*p2++ = *p1++)) continue;
spend = p2 - 1;
- p1 = genbuf; p2 = holdsp; while(*p2++ = *p1++) continue;
+ p1 = genbuf; p2 = holdsp; while((*p2++ = *p1++)) continue;
hspend = p2 - 1;
break;
case YCMD:
p1 = linebuf; p2 = ipc->u.lhs;
- while(*p1 = p2[*p1])
+ while((*p1 = p2[(unsigned char)*p1]))
p1++;
break;
}
diff --git a/tests/run b/tests/run
index 8f8c66f..785aaba 100755
--- a/tests/run
+++ b/tests/run
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/sh
verbose=1
time=0
@@ -21,7 +21,7 @@ tmp=`mktemp`
errors=0
for x in *.sed ; do
- x=${x/.sed/}
+ x=${x%.sed}
echo -n "Running test $x ..."
$1 -f $x.sed $x.in > $tmp 2>&1
error=$?
@@ -46,7 +46,7 @@ if [ $errors -ne 0 ]; then
elif [ $time -ne 0 ]; then
echo "Timing:"
time for x in *.sed ; do
- x=${x/.sed/}
+ x=${x%.sed}
echo -n . >&2
$1 -f $x.sed $x.in > $tmp
done