a3dfc1076f
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.
209 lines
4.8 KiB
Text
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;
|
|
}
|
|
|