mirror of
https://github.com/sheumann/hush.git
synced 2024-12-22 14:30:31 +00:00
Patch from David Updegraff to use calloc so that forward pointers start out
NULL, and so it can handle format strings that have stuff _after_ the last %? specification
This commit is contained in:
parent
2894266f12
commit
4a11e0fb45
36
libbb/dump.c
36
libbb/dump.c
@ -96,7 +96,7 @@ static void rewrite(FS * fs)
|
|||||||
enum { NOTOKAY, USEBCNT, USEPREC } sokay;
|
enum { NOTOKAY, USEBCNT, USEPREC } sokay;
|
||||||
register PR *pr, **nextpr = NULL;
|
register PR *pr, **nextpr = NULL;
|
||||||
register FU *fu;
|
register FU *fu;
|
||||||
register char *p1, *p2;
|
register char *p1, *p2, *p3;
|
||||||
char savech, *fmtp;
|
char savech, *fmtp;
|
||||||
const char *byte_count_str;
|
const char *byte_count_str;
|
||||||
int nconv, prec = 0;
|
int nconv, prec = 0;
|
||||||
@ -108,11 +108,13 @@ static void rewrite(FS * fs)
|
|||||||
*/
|
*/
|
||||||
for (nconv = 0, fmtp = fu->fmt; *fmtp; nextpr = &pr->nextpr) {
|
for (nconv = 0, fmtp = fu->fmt; *fmtp; nextpr = &pr->nextpr) {
|
||||||
/* NOSTRICT */
|
/* NOSTRICT */
|
||||||
pr = (PR *) xmalloc(sizeof(PR));
|
/* DBU:[dvae@cray.com] calloc so that forward ptrs start out NULL*/
|
||||||
|
pr = (PR *) xcalloc(1,sizeof(PR));
|
||||||
if (!fu->nextpr)
|
if (!fu->nextpr)
|
||||||
fu->nextpr = pr;
|
fu->nextpr = pr;
|
||||||
else
|
/* ignore nextpr -- its unused inside the loop and is
|
||||||
*nextpr = pr;
|
* uninitialized 1st time thru.
|
||||||
|
*/
|
||||||
|
|
||||||
/* bb_dump_skip preceding text and up to the next % sign */
|
/* bb_dump_skip preceding text and up to the next % sign */
|
||||||
for (p1 = fmtp; *p1 && *p1 != '%'; ++p1);
|
for (p1 = fmtp; *p1 && *p1 != '%'; ++p1);
|
||||||
@ -244,6 +246,24 @@ static void rewrite(FS * fs)
|
|||||||
pr->fmt = bb_xstrdup(fmtp);
|
pr->fmt = bb_xstrdup(fmtp);
|
||||||
*p2 = savech;
|
*p2 = savech;
|
||||||
pr->cchar = pr->fmt + (p1 - fmtp);
|
pr->cchar = pr->fmt + (p1 - fmtp);
|
||||||
|
|
||||||
|
/* DBU:[dave@cray.com] w/o this, trailing fmt text, space is lost.
|
||||||
|
* Skip subsequent text and up to the next % sign and tack the
|
||||||
|
* additional text onto fmt: eg. if fmt is "%x is a HEX number",
|
||||||
|
* we lose the " is a HEX number" part of fmt.
|
||||||
|
*/
|
||||||
|
for (p3 = p2; *p3 && *p3 != '%'; p3++);
|
||||||
|
if (p3 > p2)
|
||||||
|
{
|
||||||
|
savech = *p3;
|
||||||
|
*p3 = '\0';
|
||||||
|
if (!(pr->fmt = realloc(pr->fmt, strlen(pr->fmt)+(p3-p2)+1)))
|
||||||
|
perror_msg_and_die("hexdump");
|
||||||
|
strcat(pr->fmt, p2);
|
||||||
|
*p3 = savech;
|
||||||
|
p2 = p3;
|
||||||
|
}
|
||||||
|
|
||||||
fmtp = p2;
|
fmtp = p2;
|
||||||
|
|
||||||
/* only one conversion character if byte count */
|
/* only one conversion character if byte count */
|
||||||
@ -346,12 +366,13 @@ static int next(char **argv)
|
|||||||
static u_char *get(void)
|
static u_char *get(void)
|
||||||
{
|
{
|
||||||
static int ateof = 1;
|
static int ateof = 1;
|
||||||
static u_char *curp, *savp;
|
static u_char *curp=NULL, *savp; /*DBU:[dave@cray.com]initialize curp */
|
||||||
register int n;
|
register int n;
|
||||||
int need, nread;
|
int need, nread;
|
||||||
u_char *tmpp;
|
u_char *tmpp;
|
||||||
|
|
||||||
if (!curp) {
|
if (!curp) {
|
||||||
|
address = (off_t)0; /*DBU:[dave@cray.com] initialize,initialize..*/
|
||||||
curp = (u_char *) xmalloc(bb_dump_blocksize);
|
curp = (u_char *) xmalloc(bb_dump_blocksize);
|
||||||
savp = (u_char *) xmalloc(bb_dump_blocksize);
|
savp = (u_char *) xmalloc(bb_dump_blocksize);
|
||||||
} else {
|
} else {
|
||||||
@ -673,7 +694,7 @@ void bb_dump_add(const char *fmt)
|
|||||||
|
|
||||||
/* start new linked list of format units */
|
/* start new linked list of format units */
|
||||||
/* NOSTRICT */
|
/* NOSTRICT */
|
||||||
tfs = (FS *) xmalloc(sizeof(FS));
|
tfs = (FS *) xcalloc(1,sizeof(FS)); /*DBU:[dave@cray.com] start out NULL */
|
||||||
if (!bb_dump_fshead) {
|
if (!bb_dump_fshead) {
|
||||||
bb_dump_fshead = tfs;
|
bb_dump_fshead = tfs;
|
||||||
} else {
|
} else {
|
||||||
@ -692,7 +713,8 @@ void bb_dump_add(const char *fmt)
|
|||||||
|
|
||||||
/* allocate a new format unit and link it in */
|
/* allocate a new format unit and link it in */
|
||||||
/* NOSTRICT */
|
/* NOSTRICT */
|
||||||
tfu = (FU *) xmalloc(sizeof(FU));
|
/* DBU:[dave@cray.com] calloc so that forward pointers start out NULL */
|
||||||
|
tfu = (FU *) xcalloc(1,sizeof(FU));
|
||||||
*nextfu = tfu;
|
*nextfu = tfu;
|
||||||
nextfu = &tfu->nextfu;
|
nextfu = &tfu->nextfu;
|
||||||
tfu->reps = 1;
|
tfu->reps = 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user