mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
[shp cleanup 01..20] all the rest (re: 2d3ec8b6
)
This combines 20 cleanup commits from the dev branch. All changed files: - Clean up pointer defererences to sh. - Remove shp arguments from functions. Other notable changes: src/cmd/ksh93/include/shell.h, src/cmd/ksh93/sh/init.c: - On second thought, get rid of the function version of sh_getinterp() as libshell ABI compatibility is moot. We've already been breaking that by reordering the sh struct, so there is no way it's going to work without recompiling. src/cmd/ksh93/sh/name.c: - De-obfuscate the relationship between nv_scan() and scanfilter(). The former just calls the latter as a static function, there's no need to do that via a function pointer and void* type conversions. src/cmd/ksh93/bltins/typeset.c, src/cmd/ksh93/sh/name.c, src/cmd/ksh93/sh/nvdisc.c: - 'struct adata' and 'struct tdata', defined as local struct types in these files, need to have their first three fields in common, the first being a pointer to sh. This is because scanfilter() in name.c accesses these fields via a type conversion. So the sh field needed to be removed in all three at the same time. TODO: de-obfuscate: good practice definition via a header file. src/cmd/ksh93/sh/path.c: - Naming consistency: reserve the path_ function name prefix for externs and rename statics with that prefix. - The default path was sometimes referred to as the standard path. To use one term, rename std_path to defpath and onstdpath() to ondefpath(). - De-obfuscate SHOPT_PFSH conditional code by only calling pf_execve() (was path_pfexecve()) if that is compiled in. src/cmd/ksh93/include/streval.h, src/cmd/ksh93/sh/streval.c: - Rename extern strval() to arith_strval() for consistency. src/cmd/ksh93/sh/string.c: - Remove outdated/incorrect isxdigit() fallback; '#ifnded isxdigit' is not a correct test as isxdigit() is specified as a function. Plus, it's part of C89/C90 which we now require. (re:ac8991e5
) src/cmd/ksh93/sh/suid_exec.c: - Replace an incorrect reference to shgd->current_pid with getpid(); it cannot work as (contrary to its misleading directory placement) suid_exec is an independent libast program with no link to ksh or libshell at all. However, no one noticed because this was in fallback code for ancient systems without setreuid(2). Since that standard function was specified in POSIX Issue 4 Version 2 from 1994, we should remove that fallback code sometime as part of another obsolete code cleanup operation to avoid further bit rot. (re:843b546c
) src/cmd/ksh93/bltins/print.c: genformat(): - Remove preformat[] which was always empty and had no effect. src/cmd/ksh93/shell.3: - Minor copy-edit. - Remove documentation for nonexistent sh.infile_name. A search through ast-open-archive[*] reveals this never existed at all. - Document sh.savexit (== $?). src/cmd/ksh93/shell.3, src/cmd/ksh93/include/shell.h, src/cmd/ksh93/sh/init.c: - Remove sh.gd/shgd; this is now unused and was never documented or exposed in the shell.h public interface. - sh_sigcheck() was documented in shell.3 as taking no arguments whereas in the actual code it took a shp argument. I decided to go with the documentation. - That leaves sh_parse() as the only documented function that still takes an shp argument. I'm just going to go ahead and remove it for consistency, reverting sh_parse() to its pre-2003 spec. - Remove undocumented/unused sh_bltin_tree() function which simply returned sh.bltin_tree. - Bump SH_VERSION to 20220106.
This commit is contained in:
parent
01da863154
commit
b590a9f155
68 changed files with 3674 additions and 3935 deletions
|
@ -28,7 +28,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#define SH_VERSION 20211229
|
||||
#define SH_VERSION 20220106
|
||||
|
||||
#include <ast.h>
|
||||
#include <cdt.h>
|
||||
|
@ -226,13 +226,11 @@ struct Shell_s
|
|||
Dt_t *fun_tree; /* for shell functions */
|
||||
Dt_t *alias_tree; /* for alias names */
|
||||
Dt_t *bltin_tree; /* for builtin commands */
|
||||
Dt_t *track_tree; /* for tracked aliases */
|
||||
Shscope_t *topscope; /* pointer to top-level scope */
|
||||
int inlineno; /* line number of current input file */
|
||||
int exitval; /* exit status of the command currently being run */
|
||||
int savexit; /* $? == exit status of the last command executed */
|
||||
unsigned char trapnote; /* set when trap/signal is pending */
|
||||
char shcomp; /* set when running shcomp */
|
||||
unsigned int subshell; /* set for virtual subshell */
|
||||
|
||||
/* These are the former 'struct shared' (shgd) members. */
|
||||
struct limits lim;
|
||||
|
@ -243,7 +241,6 @@ struct Shell_s
|
|||
pid_t pid; /* $$, the main shell's PID (invariable) */
|
||||
pid_t ppid; /* $PPID, the main shell's parent's PID */
|
||||
pid_t current_pid; /* ${.sh.pid}, PID of current ksh process (updates when subshell forks) */
|
||||
int realsubshell; /* ${.sh.subshell}, actual subshell level (including virtual and forked) */
|
||||
unsigned char sigruntime[2];
|
||||
Namval_t *bltin_nodes;
|
||||
Namval_t *bltin_cmds;
|
||||
|
@ -253,13 +250,18 @@ struct Shell_s
|
|||
char **sigmsg;
|
||||
char **login_files;
|
||||
void *ed_context;
|
||||
int *stats;
|
||||
int sigmax;
|
||||
Shwait_f waitevent;
|
||||
#if SHOPT_STATS
|
||||
int *stats;
|
||||
#endif
|
||||
|
||||
/* These are the members formerly defined via the _SH_PRIVATE macro.
|
||||
/* The following members are not considered to be part of the documented API.
|
||||
* Programs using libshell should not rely on them as they may change. */
|
||||
Shell_t *gd; /* pointer to self for backwards compatibility (was: global data) */
|
||||
int subshell; /* set for virtual subshell */
|
||||
int realsubshell; /* ${.sh.subshell}, actual subshell level (including virtual and forked) */
|
||||
char shcomp; /* set when running shcomp */
|
||||
unsigned char trapnote; /* set when trap/signal is pending */
|
||||
struct sh_scoped st; /* scoped information */
|
||||
Stk_t *stk; /* stack pointer */
|
||||
Sfio_t *heredocs; /* current here-doc temp file */
|
||||
|
@ -268,7 +270,6 @@ struct Shell_s
|
|||
char *lastarg;
|
||||
char *lastpath; /* last absolute path found */
|
||||
int path_err; /* last error on path search */
|
||||
Dt_t *track_tree; /* for tracked aliases */
|
||||
Dt_t *var_base; /* global level variables */
|
||||
Dt_t *fun_base; /* global level functions */
|
||||
Dt_t *openmatch;
|
||||
|
@ -414,13 +415,12 @@ extern Libcomp_t *liblist;
|
|||
# define extern __EXPORT__
|
||||
#endif /* _DLL */
|
||||
|
||||
extern Dt_t *sh_bltin_tree(void);
|
||||
extern void sh_subfork(void);
|
||||
extern Shell_t *sh_init(int,char*[],Shinit_f);
|
||||
extern int sh_reinit(char*[]);
|
||||
extern int sh_eval(Sfio_t*,int);
|
||||
extern void sh_delay(double,int);
|
||||
extern void *sh_parse(Shell_t*, Sfio_t*,int);
|
||||
extern void *sh_parse(Sfio_t*,int);
|
||||
extern int sh_trap(const char*,int);
|
||||
extern int sh_fun(Namval_t*,Namval_t*, char*[]);
|
||||
extern int sh_funscope(int,char*[],int(*)(void*),void*,int);
|
||||
|
@ -452,7 +452,7 @@ extern mode_t sh_umask(mode_t);
|
|||
extern void *sh_waitnotify(Shwait_f);
|
||||
extern Shscope_t *sh_getscope(int,int);
|
||||
extern Shscope_t *sh_setscope(Shscope_t*);
|
||||
extern void sh_sigcheck(Shell_t*);
|
||||
extern void sh_sigcheck(void);
|
||||
extern unsigned long sh_isoption(int);
|
||||
extern unsigned long sh_onoption(int);
|
||||
extern unsigned long sh_offoption(int);
|
||||
|
@ -462,12 +462,10 @@ extern int sh_exec(const Shnode_t*,int);
|
|||
/*
|
||||
* As of 93u+m, direct access to sh is no longer obsolete, and
|
||||
* shgd ("global data") is no longer a separately allocated struct;
|
||||
* sh_getinterp() and shgd are provided here for compatibility.
|
||||
* sh_getinterp() is here for compatibility with the documented interface.
|
||||
*/
|
||||
extern Shell_t sh;
|
||||
extern Shell_t *sh_getinterp(void); /* for libshell ABI compatibility */
|
||||
#define sh_getinterp() (&sh)
|
||||
#define shgd (&sh)
|
||||
|
||||
#ifdef _DLL
|
||||
# undef extern
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue