less has a peculiar estrdup function. unlike ecalloc etc., it only prints an
error but doesn't quit. But the callers don't seem to check for null. And in
many places they call a function called save() instead.
It is clearer to make estrdup() quit and use it everywhere.
Index: cmdbuf.c
===================================================================
RCS file: /cvs/src/usr.bin/less/cmdbuf.c,v
retrieving revision 1.9
diff -u -p -r1.9 cmdbuf.c
--- cmdbuf.c 6 Nov 2015 15:50:33 -0000 1.9
+++ cmdbuf.c 7 Nov 2015 04:04:50 -0000
@@ -688,7 +688,7 @@ cmd_addhist(struct mlist *mlist, const c
* Save the command and put it at the end of the history list.
*/
ml = ecalloc(1, sizeof (struct mlist));
- ml->string = save(cmd);
+ ml->string = estrdup(cmd);
ml->next = mlist;
ml->prev = mlist->prev;
mlist->prev->next = ml;
@@ -1207,7 +1207,7 @@ histfile_name(void)
if (strcmp(name, "-") == 0 || strcmp(name, "/dev/null") == 0)
/* $LESSHISTFILE == "-" means don't use history file */
return (NULL);
- return (save(name));
+ return (estrdup(name));
}
/* Otherwise, file is in $HOME if enabled. */
Index: command.c
===================================================================
RCS file: /cvs/src/usr.bin/less/command.c,v
retrieving revision 1.21
diff -u -p -r1.21 command.c
--- command.c 6 Nov 2015 15:58:01 -0000 1.21
+++ command.c 7 Nov 2015 04:04:50 -0000
@@ -203,7 +203,7 @@ exec_mca(void)
if (*cbuf == '\0')
every_first_cmd = NULL;
else
- every_first_cmd = save(cbuf);
+ every_first_cmd = estrdup(cbuf);
break;
case A_OPT_TOGGLE:
toggle_option(curropt, opt_lower, cbuf, optflag);
Index: decode.c
===================================================================
RCS file: /cvs/src/usr.bin/less/decode.c,v
retrieving revision 1.11
diff -u -p -r1.11 decode.c
--- decode.c 6 Nov 2015 15:58:01 -0000 1.11
+++ decode.c 7 Nov 2015 04:04:50 -0000
@@ -680,9 +680,9 @@ add_hometable(char *envname, char *def_f
PARG parg;
if (envname != NULL && (filename = lgetenv(envname)) != NULL)
- filename = save(filename);
+ filename = estrdup(filename);
else if (sysvar)
- filename = save(def_filename);
+ filename = estrdup(def_filename);
else
filename = homefile(def_filename);
if (filename == NULL)
Index: edit.c
===================================================================
RCS file: /cvs/src/usr.bin/less/edit.c,v
retrieving revision 1.13
diff -u -p -r1.13 edit.c
--- edit.c 6 Nov 2015 15:50:33 -0000 1.13
+++ edit.c 7 Nov 2015 04:04:50 -0000
@@ -232,7 +232,7 @@ edit_ifile(IFILE ifile)
return (0);
}
- filename = save(get_filename(ifile));
+ filename = estrdup(get_filename(ifile));
/*
* See if LESSOPEN specifies an "alternate" file to open.
*/
Index: filename.c
===================================================================
RCS file: /cvs/src/usr.bin/less/filename.c,v
retrieving revision 1.18
diff -u -p -r1.18 filename.c
--- filename.c 6 Nov 2015 15:50:33 -0000 1.18
+++ filename.c 7 Nov 2015 04:04:50 -0000
@@ -643,14 +643,14 @@ open_altfile(char *filename, int *pf, vo
if (returnfd > 1 && status == 0) {
*pfd = NULL;
*pf = -1;
- return (save(FAKE_EMPTYFILE));
+ return (estrdup(FAKE_EMPTYFILE));
}
return (NULL);
}
ch_ungetchar(c);
*pfd = (void *) fd;
*pf = f;
- return (save("-"));
+ return (estrdup("-"));
}
cmd = readfd(fd);
pclose(fd);
Index: funcs.h
===================================================================
RCS file: /cvs/src/usr.bin/less/funcs.h,v
retrieving revision 1.10
diff -u -p -r1.10 funcs.h
--- funcs.h 6 Nov 2015 15:09:07 -0000 1.10
+++ funcs.h 7 Nov 2015 04:04:50 -0000
@@ -9,7 +9,6 @@
struct mlist;
struct loption;
-extern char *save(const char *);
extern void *ecalloc(int, unsigned int);
/*PRINTFLIKE1*/
extern char *easprintf(const char *, ...);
Index: ifile.c
===================================================================
RCS file: /cvs/src/usr.bin/less/ifile.c,v
retrieving revision 1.9
diff -u -p -r1.9 ifile.c
--- ifile.c 6 Nov 2015 15:50:33 -0000 1.9
+++ ifile.c 7 Nov 2015 04:04:50 -0000
@@ -107,7 +107,7 @@ new_ifile(char *filename, struct ifile *
* Allocate and initialize structure.
*/
p = ecalloc(1, sizeof (struct ifile));
- p->h_filename = save(filename);
+ p->h_filename = estrdup(filename);
p->h_scrpos.pos = -1;
p->h_opened = 0;
p->h_hold = 0;
Index: lsystem.c
===================================================================
RCS file: /cvs/src/usr.bin/less/lsystem.c,v
retrieving revision 1.12
diff -u -p -r1.12 lsystem.c
--- lsystem.c 6 Nov 2015 15:50:33 -0000 1.12
+++ lsystem.c 7 Nov 2015 04:04:50 -0000
@@ -85,7 +85,7 @@ lsystem(const char *cmd, const char *don
p = NULL;
if ((shell = lgetenv("SHELL")) != NULL && *shell != '\0') {
if (*cmd == '\0') {
- p = save(shell);
+ p = estrdup(shell);
} else {
char *esccmd = shell_quote(cmd);
if (esccmd != NULL) {
@@ -96,9 +96,9 @@ lsystem(const char *cmd, const char *don
}
if (p == NULL) {
if (*cmd == '\0')
- p = save("sh");
+ p = estrdup("sh");
else
- p = save(cmd);
+ p = estrdup(cmd);
}
(void) system(p);
free(p);
Index: main.c
===================================================================
RCS file: /cvs/src/usr.bin/less/main.c,v
retrieving revision 1.19
diff -u -p -r1.19 main.c
--- main.c 6 Nov 2015 15:50:33 -0000 1.19
+++ main.c 7 Nov 2015 04:04:50 -0000
@@ -107,7 +107,7 @@ main(int argc, char *argv[])
s = lgetenv(less_is_more ? "MORE" : "LESS");
if (s != NULL)
- scan_option(save(s));
+ scan_option(estrdup(s));
if (less_is_more) {
/* this is specified by XPG */
@@ -257,20 +257,6 @@ main(int argc, char *argv[])
}
/*
- * Copy a string to a "safe" place
- * (that is, to a buffer allocated by calloc).
- */
-char *
-save(const char *s)
-{
- char *p;
-
- if ((p = estrdup(s)) == NULL)
- quit(QUIT_ERROR);
- return (p);
-}
-
-/*
* Allocate memory.
* Like calloc(), but never returns an error (NULL).
*/
@@ -310,9 +296,12 @@ easprintf(const char *fmt, ...)
char *
estrdup(const char *str)
{
- char *n = strdup(str);
- if (n == NULL && str != NULL) {
+ char *n;
+
+ n = strdup(str);
+ if (n == NULL) {
error("Cannot allocate memory", NULL_PARG);
+ quit(QUIT_ERROR);
}
return (n);
}
Index: optfunc.c
===================================================================
RCS file: /cvs/src/usr.bin/less/optfunc.c,v
retrieving revision 1.11
diff -u -p -r1.11 optfunc.c
--- optfunc.c 6 Nov 2015 15:50:33 -0000 1.11
+++ optfunc.c 7 Nov 2015 04:04:50 -0000
@@ -347,7 +347,7 @@ opt__P(int type, char *s)
default: proto = &prproto[PR_SHORT]; break;
}
free(*proto);
- *proto = save(s);
+ *proto = estrdup(s);
break;
case QUERY:
parg.p_string = prproto[pr_type];
Index: option.c
===================================================================
RCS file: /cvs/src/usr.bin/less/option.c,v
retrieving revision 1.11
diff -u -p -r1.11 option.c
--- option.c 6 Nov 2015 15:50:33 -0000 1.11
+++ option.c 7 Nov 2015 04:04:50 -0000
@@ -151,7 +151,7 @@ scan_option(char *s)
if (s == NULL)
return;
if (*str == '+')
- every_first_cmd = save(str+1);
+ every_first_cmd = estrdup(str+1);
else
ungetsc(str);
free(str);
Index: prompt.c
===================================================================
RCS file: /cvs/src/usr.bin/less/prompt.c,v
retrieving revision 1.15
diff -u -p -r1.15 prompt.c
--- prompt.c 6 Nov 2015 15:50:33 -0000 1.15
+++ prompt.c 7 Nov 2015 04:04:50 -0000
@@ -75,12 +75,12 @@ static char *mp;
void
init_prompt(void)
{
- prproto[0] = save(s_proto);
- prproto[1] = save(less_is_more ? more_proto : m_proto);
- prproto[2] = save(less_is_more ? more_M_proto : M_proto);
- eqproto = save(e_proto);
- hproto = save(h_proto);
- wproto = save(w_proto);
+ prproto[0] = estrdup(s_proto);
+ prproto[1] = estrdup(less_is_more ? more_proto : m_proto);
+ prproto[2] = estrdup(less_is_more ? more_M_proto : M_proto);
+ eqproto = estrdup(e_proto);
+ hproto = estrdup(h_proto);
+ wproto = estrdup(w_proto);
}
/*
Index: tags.c
===================================================================
RCS file: /cvs/src/usr.bin/less/tags.c,v
retrieving revision 1.13
diff -u -p -r1.13 tags.c
--- tags.c 6 Nov 2015 15:50:33 -0000 1.13
+++ tags.c 7 Nov 2015 04:04:50 -0000
@@ -112,13 +112,13 @@ maketagent(char *file, LINENUM linenum,
struct tag *tp;
tp = ecalloc(sizeof (struct tag), 1);
- tp->tag_file = save(file);
+ tp->tag_file = estrdup(file);
tp->tag_linenum = linenum;
tp->tag_endline = endline;
if (pattern == NULL)
tp->tag_pattern = NULL;
else
- tp->tag_pattern = save(pattern);
+ tp->tag_pattern = estrdup(pattern);
return (tp);
}