address latest Debian gcc-snapshot’s warnings (some actual bugs!)

This commit is contained in:
tg 2016-03-04 14:26:16 +00:00
parent e8d6b5c2a3
commit cb0604767f
8 changed files with 71 additions and 63 deletions

View File

@ -1,4 +1,4 @@
# $MirOS: src/bin/mksh/check.t,v 1.726 2016/03/01 18:30:01 tg Exp $ # $MirOS: src/bin/mksh/check.t,v 1.727 2016/03/04 14:26:09 tg Exp $
# -*- mode: sh -*- # -*- mode: sh -*-
#- #-
# Copyright © 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # Copyright © 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
@ -30,7 +30,7 @@
# (2013/12/02 20:39:44) http://openbsd.cs.toronto.edu/cgi-bin/cvsweb/src/regress/bin/ksh/?sortby=date # (2013/12/02 20:39:44) http://openbsd.cs.toronto.edu/cgi-bin/cvsweb/src/regress/bin/ksh/?sortby=date
expected-stdout: expected-stdout:
@(#)MIRBSD KSH R52 2016/03/01 @(#)MIRBSD KSH R52 2016/03/04
description: description:
Check version of shell. Check version of shell.
stdin: stdin:
@ -39,7 +39,7 @@ name: KSH_VERSION
category: shell:legacy-no category: shell:legacy-no
--- ---
expected-stdout: expected-stdout:
@(#)LEGACY KSH R52 2016/03/01 @(#)LEGACY KSH R52 2016/03/04
description: description:
Check version of legacy shell. Check version of legacy shell.
stdin: stdin:

6
edit.c
View File

@ -28,7 +28,7 @@
#ifndef MKSH_NO_CMDLINE_EDITING #ifndef MKSH_NO_CMDLINE_EDITING
__RCSID("$MirOS: src/bin/mksh/edit.c,v 1.293 2016/01/21 18:24:37 tg Exp $"); __RCSID("$MirOS: src/bin/mksh/edit.c,v 1.294 2016/03/04 14:26:12 tg Exp $");
/* /*
* in later versions we might use libtermcap for this, but since external * in later versions we might use libtermcap for this, but since external
@ -4597,8 +4597,8 @@ vi_cmd(int argcnt, const char *cmd)
static int static int
domove(int argcnt, const char *cmd, int sub) domove(int argcnt, const char *cmd, int sub)
{ {
int bcount, i = 0, t; int ncursor = 0, i = 0, t;
int ncursor = 0; unsigned int bcount;
switch (*cmd) { switch (*cmd) {
case 'b': case 'b':

View File

@ -27,7 +27,7 @@
#include <sys/file.h> #include <sys/file.h>
#endif #endif
__RCSID("$MirOS: src/bin/mksh/histrap.c,v 1.155 2016/03/01 18:29:48 tg Exp $"); __RCSID("$MirOS: src/bin/mksh/histrap.c,v 1.156 2016/03/04 14:26:13 tg Exp $");
Trap sigtraps[ksh_NSIG + 1]; Trap sigtraps[ksh_NSIG + 1];
static struct sigaction Sigact_ign; static struct sigaction Sigact_ign;
@ -1017,16 +1017,19 @@ inittraps(void)
{ {
int i; int i;
const char *cs; const char *cs;
#if !HAVE_SYS_SIGNAME
const struct mksh_sigpair *pair;
#endif
trap_exstat = -1; trap_exstat = -1;
/* Populate sigtraps based on sys_signame and sys_siglist. */ /* populate sigtraps based on sys_signame and sys_siglist */
for (i = 1; i < ksh_NSIG; i++) { for (i = 1; i < ksh_NSIG; i++) {
sigtraps[i].signal = i; sigtraps[i].signal = i;
#if HAVE_SYS_SIGNAME #if HAVE_SYS_SIGNAME
cs = sys_signame[i]; cs = sys_signame[i];
#else #else
const struct mksh_sigpair *pair = mksh_sigpairs; pair = mksh_sigpairs;
while ((pair->nr != i) && (pair->name != NULL)) while ((pair->nr != i) && (pair->name != NULL))
++pair; ++pair;
cs = pair->name; cs = pair->name;

6
jobs.c
View File

@ -23,7 +23,7 @@
#include "sh.h" #include "sh.h"
__RCSID("$MirOS: src/bin/mksh/jobs.c,v 1.119 2016/02/24 01:44:45 tg Exp $"); __RCSID("$MirOS: src/bin/mksh/jobs.c,v 1.120 2016/03/04 14:26:13 tg Exp $");
#if HAVE_KILLPG #if HAVE_KILLPG
#define mksh_killpg killpg #define mksh_killpg killpg
@ -1425,8 +1425,8 @@ check_job(Job *j)
/* XXX debugging (nasty - interrupt routine using shl_out) */ /* XXX debugging (nasty - interrupt routine using shl_out) */
if (!(j->flags & JF_STARTED)) { if (!(j->flags & JF_STARTED)) {
internal_warningf("check_job: job started (flags 0x%x)", internal_warningf("check_job: job started (flags 0x%X)",
j->flags); (unsigned int)j->flags);
return; return;
} }

4
misc.c
View File

@ -30,7 +30,7 @@
#include <grp.h> #include <grp.h>
#endif #endif
__RCSID("$MirOS: src/bin/mksh/misc.c,v 1.241 2016/01/21 18:24:43 tg Exp $"); __RCSID("$MirOS: src/bin/mksh/misc.c,v 1.242 2016/03/04 14:26:13 tg Exp $");
#define KSH_CHVT_FLAG #define KSH_CHVT_FLAG
#ifdef MKSH_SMALL #ifdef MKSH_SMALL
@ -1291,7 +1291,7 @@ print_columns(struct shf *shf, unsigned int n,
shf_puts(str, shf); shf_puts(str, shf);
else else
shf_fprintf(shf, "%*s%*s", shf_fprintf(shf, "%*s%*s",
max_col, str, nspace, null); (int)max_col, str, (int)nspace, null);
} }
shf_putchar('\n', shf); shf_putchar('\n', shf);
} }

12
sh.h
View File

@ -175,9 +175,9 @@
#endif #endif
#ifdef EXTERN #ifdef EXTERN
__RCSID("$MirOS: src/bin/mksh/sh.h,v 1.766 2016/03/01 18:30:05 tg Exp $"); __RCSID("$MirOS: src/bin/mksh/sh.h,v 1.767 2016/03/04 14:26:14 tg Exp $");
#endif #endif
#define MKSH_VERSION "R52 2016/03/01" #define MKSH_VERSION "R52 2016/03/04"
/* arithmetic types: C implementation */ /* arithmetic types: C implementation */
#if !HAVE_CAN_INTTYPES #if !HAVE_CAN_INTTYPES
@ -850,11 +850,13 @@ EXTERN struct {
/* null value for variable; comparison pointer for unset */ /* null value for variable; comparison pointer for unset */
EXTERN char null[] E_INIT(""); EXTERN char null[] E_INIT("");
/* helpers for string pooling */ /* helpers for string pooling */
EXTERN const char Tintovfl[] E_INIT("integer overflow %zu %c %zu prevented");
EXTERN const char Toomem[] E_INIT("can't allocate %zu data bytes");
#if defined(__GNUC__) #if defined(__GNUC__)
#define Tsynerr "syntax error" #define Tsynerr "syntax error"
#define Tintovfl "integer overflow %zu %c %zu prevented"
#define Toomem "can't allocate %zu data bytes"
#else #else
EXTERN const char Tintovfl[] E_INIT("integer overflow %zu %c %zu prevented");
EXTERN const char Toomem[] E_INIT("can't allocate %zu data bytes");
EXTERN const char Tsynerr[] E_INIT("syntax error"); EXTERN const char Tsynerr[] E_INIT("syntax error");
#endif #endif
EXTERN const char Tselect[] E_INIT("select"); EXTERN const char Tselect[] E_INIT("select");
@ -2011,7 +2013,7 @@ char *shf_smprintf(const char *, ...)
ssize_t shf_vfprintf(struct shf *, const char *, va_list) ssize_t shf_vfprintf(struct shf *, const char *, va_list)
MKSH_A_FORMAT(__printf__, 2, 0); MKSH_A_FORMAT(__printf__, 2, 0);
/* syn.c */ /* syn.c */
int assign_command(const char *, bool); int assign_command(const char *, bool) MKSH_A_PURE;
void initkeywords(void); void initkeywords(void);
struct op *compile(Source *, bool); struct op *compile(Source *, bool);
bool parse_usec(const char *, struct timeval *); bool parse_usec(const char *, struct timeval *);

85
shf.c
View File

@ -2,7 +2,7 @@
/*- /*-
* Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2011, * Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2011,
* 2012, 2013, 2015 * 2012, 2013, 2015, 2016
* mirabilos <m@mirbsd.org> * mirabilos <m@mirbsd.org>
* *
* Provided that these terms and disclaimer and all copyright notices * Provided that these terms and disclaimer and all copyright notices
@ -25,7 +25,7 @@
#include "sh.h" #include "sh.h"
__RCSID("$MirOS: src/bin/mksh/shf.c,v 1.69 2015/12/31 20:38:59 tg Exp $"); __RCSID("$MirOS: src/bin/mksh/shf.c,v 1.70 2016/03/04 14:26:16 tg Exp $");
/* flags to shf_emptybuf() */ /* flags to shf_emptybuf() */
#define EB_READSW 0x01 /* about to switch to reading */ #define EB_READSW 0x01 /* about to switch to reading */
@ -197,7 +197,8 @@ shf_sopen(char *buf, ssize_t bsize, int sflags, struct shf *shf)
{ {
/* can't have a read+write string */ /* can't have a read+write string */
if (!(!(sflags & SHF_RD) ^ !(sflags & SHF_WR))) if (!(!(sflags & SHF_RD) ^ !(sflags & SHF_WR)))
internal_errorf("%s: flags 0x%X", "shf_sopen", sflags); internal_errorf("%s: flags 0x%X", "shf_sopen",
(unsigned int)sflags);
if (!shf) { if (!shf) {
shf = alloc(sizeof(struct shf), ATEMP); shf = alloc(sizeof(struct shf), ATEMP);
@ -452,7 +453,8 @@ shf_read(char *buf, ssize_t bsize, struct shf *shf)
ssize_t ncopy, orig_bsize = bsize; ssize_t ncopy, orig_bsize = bsize;
if (!(shf->flags & SHF_RD)) if (!(shf->flags & SHF_RD))
internal_errorf("%s: flags 0x%X", "shf_read", shf->flags); internal_errorf("%s: flags 0x%X", "shf_read",
(unsigned int)shf->flags);
if (bsize <= 0) if (bsize <= 0)
internal_errorf("%s: %s %zd", "shf_write", "bsize", bsize); internal_errorf("%s: %s %zd", "shf_write", "bsize", bsize);
@ -489,7 +491,8 @@ shf_getse(char *buf, ssize_t bsize, struct shf *shf)
char *orig_buf = buf; char *orig_buf = buf;
if (!(shf->flags & SHF_RD)) if (!(shf->flags & SHF_RD))
internal_errorf("%s: flags 0x%X", "shf_getse", shf->flags); internal_errorf("%s: flags 0x%X", "shf_getse",
(unsigned int)shf->flags);
if (bsize <= 0) if (bsize <= 0)
return (NULL); return (NULL);
@ -525,7 +528,8 @@ int
shf_getchar(struct shf *shf) shf_getchar(struct shf *shf)
{ {
if (!(shf->flags & SHF_RD)) if (!(shf->flags & SHF_RD))
internal_errorf("%s: flags 0x%X", "shf_getchar", shf->flags); internal_errorf("%s: flags 0x%X", "shf_getchar",
(unsigned int)shf->flags);
if (shf->rnleft == 0 && (shf_fillbuf(shf) == -1 || shf->rnleft == 0)) if (shf->rnleft == 0 && (shf_fillbuf(shf) == -1 || shf->rnleft == 0))
return (-1); return (-1);
@ -541,7 +545,8 @@ int
shf_ungetc(int c, struct shf *shf) shf_ungetc(int c, struct shf *shf)
{ {
if (!(shf->flags & SHF_RD)) if (!(shf->flags & SHF_RD))
internal_errorf("%s: flags 0x%X", "shf_ungetc", shf->flags); internal_errorf("%s: flags 0x%X", "shf_ungetc",
(unsigned int)shf->flags);
if ((shf->flags & SHF_ERROR) || c == -1 || if ((shf->flags & SHF_ERROR) || c == -1 ||
(shf->rp == shf->buf && shf->rnleft)) (shf->rp == shf->buf && shf->rnleft))
@ -578,7 +583,8 @@ int
shf_putchar(int c, struct shf *shf) shf_putchar(int c, struct shf *shf)
{ {
if (!(shf->flags & SHF_WR)) if (!(shf->flags & SHF_WR))
internal_errorf("%s: flags 0x%X", "shf_putchar", shf->flags); internal_errorf("%s: flags 0x%X", "shf_putchar",
(unsigned int)shf->flags);
if (c == -1) if (c == -1)
return (-1); return (-1);
@ -633,7 +639,8 @@ shf_write(const char *buf, ssize_t nbytes, struct shf *shf)
ssize_t n, ncopy, orig_nbytes = nbytes; ssize_t n, ncopy, orig_nbytes = nbytes;
if (!(shf->flags & SHF_WR)) if (!(shf->flags & SHF_WR))
internal_errorf("%s: flags 0x%X", "shf_write", shf->flags); internal_errorf("%s: flags 0x%X", "shf_write",
(unsigned int)shf->flags);
if (nbytes < 0) if (nbytes < 0)
internal_errorf("%s: %s %zd", "shf_write", "nbytes", nbytes); internal_errorf("%s: %s %zd", "shf_write", "nbytes", nbytes);
@ -764,7 +771,7 @@ shf_vfprintf(struct shf *shf, const char *fmt, va_list args)
const char *s; const char *s;
char c, *cp; char c, *cp;
int tmp = 0, flags; int tmp = 0, flags;
ssize_t field, precision, len; size_t field, precision, len;
unsigned long lnum; unsigned long lnum;
/* %#o produces the longest output */ /* %#o produces the longest output */
char numbuf[(8 * sizeof(long) + 2) / 3 + 1]; char numbuf[(8 * sizeof(long) + 2) / 3 + 1];
@ -791,7 +798,7 @@ shf_vfprintf(struct shf *shf, const char *fmt, va_list args)
*/ */
flags = 0; flags = 0;
field = precision = 0; field = precision = 0;
for ( ; (c = *fmt++) ; ) { while ((c = *fmt++)) {
switch (c) { switch (c) {
case '#': case '#':
flags |= FL_HASH; flags |= FL_HASH;
@ -821,12 +828,17 @@ shf_vfprintf(struct shf *shf, const char *fmt, va_list args)
case '*': case '*':
tmp = VA(int); tmp = VA(int);
if (flags & FL_DOT) if (tmp < 0) {
precision = tmp; if (flags & FL_DOT)
else if ((field = tmp) < 0) { precision = 0;
field = -field; else {
flags |= FL_RIGHT; field = (unsigned int)-tmp;
} flags |= FL_RIGHT;
}
} else if (flags & FL_DOT)
precision = (unsigned int)tmp;
else
field = (unsigned int)tmp;
continue; continue;
case 'l': case 'l':
@ -848,26 +860,23 @@ shf_vfprintf(struct shf *shf, const char *fmt, va_list args)
bool overflowed = false; bool overflowed = false;
tmp = ksh_numdig(c); tmp = ksh_numdig(c);
while (c = *fmt++, ksh_isdigit(c)) { while (c = *fmt++, ksh_isdigit(c))
if (notok2mul(2147483647, tmp, 10)) if (notok2mul(2147483647, tmp, 10))
overflowed = true; overflowed = true;
tmp = tmp * 10 + ksh_numdig(c); else
} tmp = tmp * 10 + ksh_numdig(c);
--fmt; --fmt;
if (overflowed) if (overflowed)
tmp = 0; tmp = 0;
if (flags & FL_DOT) if (flags & FL_DOT)
precision = tmp; precision = (unsigned int)tmp;
else else
field = tmp; field = (unsigned int)tmp;
continue; continue;
} }
break; break;
} }
if (precision < 0)
precision = 0;
if (!c) if (!c)
/* nasty format */ /* nasty format */
break; break;
@ -953,7 +962,7 @@ shf_vfprintf(struct shf *shf, const char *fmt, va_list args)
*--cp = (flags & FL_UPPER) ? 'X' : 'x'; *--cp = (flags & FL_UPPER) ? 'X' : 'x';
*--cp = '0'; *--cp = '0';
} }
} }
} }
len = numbuf + sizeof(numbuf) - (s = cp); len = numbuf + sizeof(numbuf) - (s = cp);
if (flags & FL_DOT) { if (flags & FL_DOT) {
@ -999,7 +1008,6 @@ shf_vfprintf(struct shf *shf, const char *fmt, va_list args)
if (field > precision) { if (field > precision) {
field -= precision; field -= precision;
if (!(flags & FL_RIGHT)) { if (!(flags & FL_RIGHT)) {
field = -field;
/* skip past sign or 0x when padding with 0 */ /* skip past sign or 0x when padding with 0 */
if ((flags & FL_ZERO) && (flags & FL_NUMBER)) { if ((flags & FL_ZERO) && (flags & FL_NUMBER)) {
if (*s == '+' || *s == '-' || if (*s == '+' || *s == '-' ||
@ -1012,7 +1020,7 @@ shf_vfprintf(struct shf *shf, const char *fmt, va_list args)
shf_putc(*s, shf); shf_putc(*s, shf);
s++; s++;
nwritten++; nwritten++;
if (--precision > 0 && if (--precision &&
ksh_eq(*s, 'X', 'x')) { ksh_eq(*s, 'X', 'x')) {
shf_putc(*s, shf); shf_putc(*s, shf);
s++; s++;
@ -1023,19 +1031,16 @@ shf_vfprintf(struct shf *shf, const char *fmt, va_list args)
c = '0'; c = '0';
} else } else
c = flags & FL_ZERO ? '0' : ' '; c = flags & FL_ZERO ? '0' : ' ';
if (field < 0) { nwritten += field;
nwritten += -field; while (field--)
while (field < 0) { shf_putc(c, shf);
shf_putc(c, shf); field = 0;
++field;
}
}
} else } else
c = ' '; c = ' ';
} else } else
field = 0; field = 0;
if (precision > 0) { if (precision) {
const char *q; const char *q;
nwritten += precision; nwritten += precision;
@ -1044,11 +1049,9 @@ shf_vfprintf(struct shf *shf, const char *fmt, va_list args)
shf_putc(*s, shf); shf_putc(*s, shf);
} while (++s < q); } while (++s < q);
} }
if (field > 0) { nwritten += field;
nwritten += field; while (field--)
for ( ; field > 0 ; --field) shf_putc(c, shf);
shf_putc(c, shf);
}
} }
return (shf_error(shf) ? -1 : nwritten); return (shf_error(shf) ? -1 : nwritten);

6
tree.c
View File

@ -23,7 +23,7 @@
#include "sh.h" #include "sh.h"
__RCSID("$MirOS: src/bin/mksh/tree.c,v 1.82 2016/02/26 17:58:30 tg Exp $"); __RCSID("$MirOS: src/bin/mksh/tree.c,v 1.83 2016/03/04 14:26:16 tg Exp $");
#define INDENT 8 #define INDENT 8
@ -631,8 +631,8 @@ wdscan(const char *wp, int c)
break; break;
default: default:
internal_warningf( internal_warningf(
"wdscan: unknown char 0x%x (carrying on)", "wdscan: unknown char 0x%X (carrying on)",
wp[-1]); (unsigned char)wp[-1]);
} }
} }