pkgsrc/editors/ex/patches/patch-ex__vmain_c
dholland a3dfc1076f Fix legacy C. Pass -Wall -W -Wmissing-declarations -Wwrite-strings on
gcc45.

   - avoid implicit int, declare void functions void
   - return values from non-void functions
   - put most external declarations properly in header files
   - use some static and const
   - fix up a big mess with function pointer casting
   - use standard includes, don't provide own decls of standard functions
   - use types matching libc when providing own malloc, printf, and putchar
   - use <ctype.h> functions correctly
   - silence assorted compiler warnings
   - fix some bugs exposed by compiler warnings
   - don't intentionally exercise signed overflow
   - remove some unused items
   - add patch comments to other patch (patch-aa)

As this includes several fixes and removes some undefined behavior on
a commonly reachable code path, bump PKGREVISION.
2012-12-28 03:03:08 +00:00

209 lines
4.8 KiB
Text

$NetBSD: patch-ex__vmain_c,v 1.1 2012/12/28 03:03:09 dholland Exp $
- declare local functions static
- declare void functions void
- use volatile for compiler warnings about setjmp/vfork clobbering
- fix up function pointer casting mess
- silence warnings about assignments in conditionals
- use <ctype.h> functions correctly
- silence warnings about && and || precedence
--- ex_vmain.c~ 2012-12-27 21:58:42.000000000 +0000
+++ ex_vmain.c
@@ -83,8 +83,8 @@ static char sccsid[] = "@(#)ex_vmain.c 1
#include "ex_tty.h"
#include "ex_vis.h"
-int vzop __P((int, int, register int));
-int grabtag __P((void));
+static void vzop __P((int, int, register int));
+static void grabtag __P((void));
/*
* This is the main routine for visual.
@@ -96,17 +96,26 @@ int grabtag __P((void));
#define forbid(a) { if (a) goto fonfon; }
+static void
+doput(int ignore)
+{
+ (void)ignore;
+ put();
+}
+
+void
vmain()
{
int c, cnt, i;
cell esave[TUBECOLS];
- char *oglobp;
- short d;
- line *addr;
+ const char *volatile oglobp;
+ volatile short d;
+ line *volatile addr;
int ind, nlput;
- int shouldpo = 0;
- int onumber = 0, olist = 0,
- (*OPline)() = NULL, (*OPutchar)() = NULL;
+ volatile int shouldpo = 0;
+ volatile int onumber = 0, olist = 0;
+ int (*volatile OPline)(int) = NULL;
+ int (*volatile OPutchar)(int) = NULL;
CLOBBGRD(c);
CLOBBGRD(cnt);
@@ -160,7 +169,7 @@ vmain()
Xhadcnt = hadcnt = 0;
Xcnt = cnt = 1;
splitw = 0;
- if (i = holdupd) {
+ if ((i = holdupd) != 0) {
if (state == VISUAL)
ignore(peekkey());
holdupd = 0;
@@ -205,7 +214,7 @@ looptop:
* an 'empty' named buffer spec in the routine
* kshift (see ex_temp.c).
*/
- forbid (c == '0' || !isalpha(c) && !isdigit(c));
+ forbid (c == '0' || (!isalpha((unsigned char)c) && !isdigit((unsigned char)c)));
vreg = c;
}
reread:
@@ -635,8 +644,8 @@ reread:
if (isalpha(cuc(mbuf[1])))
{
char x = cuc(mbuf[1]);
- mbuf[1] = isupper(x) ?
- tolower(x) : toupper(x);
+ mbuf[1] = isupper((unsigned char)x) ?
+ tolower((unsigned char)x) : toupper((unsigned char)x);
}
macpush(mbuf, 1);
}
@@ -865,7 +874,7 @@ case_ATTN:
vmacchng(1);
setLAST();
i = 0;
- if (vreg && partreg(vreg) || !vreg && pkill[0]) {
+ if ((vreg && partreg(vreg)) || (!vreg && pkill[0])) {
/*
* Restoring multiple lines which were partial
* lines; will leave cursor in middle
@@ -898,8 +907,7 @@ case_ATTN:
*/
addr = dol; /* old dol */
CATCH
- vremote(1, vreg ? (int(*)())putreg
- : (int(*)())put, vreg);
+ vremote(1, vreg ? putreg : doput, vreg);
ONERR
if (vreg == -1) {
splitw = 0;
@@ -1160,7 +1168,7 @@ fixup:
* in open mode and . moved, then redraw.
*/
i = vcline + (dot - addr);
- if (i < 0 || i >= vcnt && i >= -vcnt || state != VISUAL && dot != addr) {
+ if (i < 0 || (i >= vcnt && i >= -vcnt) || (state != VISUAL && dot != addr)) {
if (state == CRTOPEN)
vup1();
if (vcnt > 0)
@@ -1247,6 +1255,7 @@ fonfon:
/*
* Grab the word after the cursor so we can look for it as a tag.
*/
+static void
grabtag()
{
register char *cp, *dp;
@@ -1271,6 +1280,7 @@ grabtag()
* Before appending lines, set up addr1 and
* the command mode undo information.
*/
+void
prepapp()
{
@@ -1284,8 +1294,8 @@ prepapp()
* Execute function f with the address bounds addr1
* and addr2 surrounding cnt lines starting at dot.
*/
-vremote(cnt, f, arg)
- int cnt, (*f)(), arg;
+void
+vremote(int cnt, void (*f)(int), int arg)
{
register int oing = inglobal;
@@ -1301,15 +1311,23 @@ vremote(cnt, f, arg)
vmcurs = 0;
}
+static void
+doyank(int ignore)
+{
+ (void)ignore;
+ yank();
+}
+
/*
* Save the current contents of linebuf, if it has changed.
*/
+void
vsave()
{
char temp[LBSIZE];
CP(temp, linebuf);
- if (FIXUNDO && vundkind == VCHNG || vundkind == VCAPU) {
+ if ((FIXUNDO && vundkind == VCHNG) || vundkind == VCAPU) {
/*
* If the undo state is saved in the temporary buffer
* vutmp, then we sync this into the temp file so that
@@ -1321,7 +1339,7 @@ vsave()
prepapp();
CP(linebuf, vutmp);
putmark(dot);
- vremote(1, yank, 0);
+ vremote(1, doyank, 0);
vundkind = VMCHNG;
notecnt = 0;
undkind = UNDCHANGE;
@@ -1345,6 +1363,7 @@ vsave()
* Do a z operation.
* Code here is rather long, and very uninteresting.
*/
+static void
vzop(hadcnt, cnt, c)
bool hadcnt;
int cnt;
@@ -1434,7 +1453,7 @@ register char *src;
{
register cell *cp = dst;
- while (*cp++ = *src++ & 0377);
+ while ((*cp++ = *src++ & 0377) != 0);
return dst;
}
@@ -1445,7 +1464,7 @@ register cell *src;
{
register char *cp = dst;
- while (*cp++ = *src++);
+ while ((*cp++ = *src++) != 0);
return dst;
}
@@ -1456,7 +1475,7 @@ register cell *src;
{
register cell *cp = dst;
- while (*cp++ = *src++);
+ while ((*cp++ = *src++) != 0);
return dst;
}