mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
The referenced commit neglected to add checks for strdup() calls.
That calls malloc() as well, and is used a lot.
This commit switches to another strategy: it adds wrapper functions
for all the allocation macros that check if the allocation
succeeded, so those checks don't need to be done manually.
src/cmd/ksh93/include/defs.h,
src/cmd/ksh93/sh/init.c:
- Add sh_malloc(), sh_realloc(), sh_calloc(), sh_strdup(),
sh_memdup() wrapper functions with success checks. Call nospace()
to error out if allocation fails.
- Update new_of() macro to use sh_malloc().
- Define new sh_newof() macro to replace newof(); it uses
sh_realloc().
All other changed files:
- Replace the relevant calls with the wrappers.
- Remove now-redundant success checks from 18529b88.
- The ERROR_PANIC error message calls are updated to inclusive-or
ERROR_SYSTEM into the exit code argument, so libast's error()
appends the human-readable version of errno in square brackets.
See src/lib/libast/man/error.3
src/cmd/ksh93/edit/history.c:
- Include "defs.h" to get access to the wrappers even if KSHELL is
not defined.
- Since we're here, fix a compile error that occurred with KSHELL
undefined by updating the type definition of hist_fname[] to
match that of history.h.
src/cmd/ksh93/bltins/enum.c:
- To get access to sh_newof(), include "defs.h" instead of
<shell.h> (note that "defs.h" includes <shell.h> itself).
src/cmd/ksh93/Mamfile:
- enum.c: depend on defs.h instead of shell.h.
- enum.o: add an -I. flag in the compiler invocation so that defs.h
can find its subsequent includes.
src/cmd/builtin/pty.c:
- Define one outofmemory() function and call that instead of
repeating the error message call.
- outofmemory() never returns, so remove superfluous exit handling.
Co-authored-by: Martijn Dekker <martijn@inlv.org>
This commit is contained in:
parent
c928046aa9
commit
7ad274f8b6
33 changed files with 261 additions and 371 deletions
|
|
@ -290,8 +290,6 @@ struct shared
|
|||
/* error exits from various parts of shell */
|
||||
#define NIL(type) ((type)0)
|
||||
|
||||
#define new_of(type,x) ((type*)malloc((unsigned)sizeof(type)+(x)))
|
||||
|
||||
#define exitset() (sh.savexit=sh.exitval)
|
||||
|
||||
#ifndef SH_DICT
|
||||
|
|
@ -367,7 +365,6 @@ extern Sfdouble_t sh_mathfun(Shell_t*, void*, int, Sfdouble_t*);
|
|||
extern int sh_outtype(Shell_t*, Sfio_t*);
|
||||
extern char *sh_mactry(Shell_t*,char*);
|
||||
extern int sh_mathstd(const char*);
|
||||
extern void sh_outofmemory(void);
|
||||
extern void sh_printopts(Shopt_t,int,Shopt_t*);
|
||||
extern int sh_readline(Shell_t*,char**,volatile int,int,ssize_t,long);
|
||||
extern Sfio_t *sh_sfeval(char*[]);
|
||||
|
|
@ -392,6 +389,15 @@ extern int sh_whence(char**,int);
|
|||
extern Namval_t *sh_fsearch(Shell_t*,const char *,int);
|
||||
#endif /* SHOPT_NAMESPACE */
|
||||
|
||||
/* malloc related wrappers */
|
||||
extern void *sh_malloc(size_t size);
|
||||
extern void *sh_realloc(void *ptr, size_t size);
|
||||
extern void *sh_calloc(size_t nmemb, size_t size);
|
||||
extern char *sh_strdup(const char *s);
|
||||
extern void *sh_memdup(const void *s, size_t n);
|
||||
#define new_of(type,x) ((type*)sh_malloc((unsigned)sizeof(type)+(x)))
|
||||
#define sh_newof(p,t,n,x) ((p)?(t*)sh_realloc((char*)(p),sizeof(t)*(n)+(x)):(t*)sh_calloc(1,sizeof(t)*(n)+(x)))
|
||||
|
||||
#define URI_RFC3986_UNRESERVED "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~"
|
||||
|
||||
#ifndef ERROR_dictionary
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue