tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: sh(1): POSIX "Command Search and Execution"



Thanks! I will come back to you when I have done the job (I think I
will have a slot on thursday).

Best,

T. Laronde

On Sun, Sep 22, 2024 at 06:07:21PM +0700, Robert Elz wrote:
> 
>   | is set, the option can not be set; if posix is set after, the option
>   | is reset to off) with a name of "xpathsearch" or "xfilename", would
>   | seem acceptable? I will find some time next week to try to add it.
> 
> To do that you're going to want to apply the following patch to
> mkoptions.sh first.
> 
> I'm also including a patch for option.list to demonstrate how to set it up.
> 
> In that I used VARNAME and OPTIONNAME as dummy placeholders (and also set up
> the option set to make the new option and "posix" be mutually exclusive).
> 
> For that OPTIONNAME is whatever the (long) option name is to be called, and
> can be anything that doesn't conflict with the exising long option names
> (it must be at least 2 chars long or it would be an option flag instead,
> and have different requirements).
> 
> VARNAME is what the option is called inside the shell source code, you use
> it just like a boolean
> 	if (VARNAME /* && ... */)
> It can be anything that would be a normal C variable name (not usually all
> upper case) but ends up being defined as a macro (#define VARNAME ...)
> so needs to be different from all other names anywhere in the shell source
> code (grep to check), and you must not attempt to declare it anywhere.
> Just insure that "options.h" is #included (only likely to be relevant if
> you add new source file(s) - I'd guess that one is included everywhere
> already).
> 
> If the requirements for both of those are met, VARNAME and OPTIONNAME can
> be made equal, which can make reading the sources a bit easier.
> 
> It is not important where that line is put in option.list - anywhere works,
> but it is better to pick the right group (which would be the one I used in
> the example patch) and then very roughly lexically sorted in that group
> (which I didn't do, the names I used are obviously fake) - only roughly
> sorted as other historical/emotional issues also come into play here
> (and the order really makes no difference to how it all ends up or is
> used, it is 100% for human benefit).
> 
> Don't attempt to do anything which would alter VARNAME - all that will
> already be handled.  Just use it and modify the path searching code using it.
> (You can apply both patches as they are and verify that all of the stuff
> related to managing the new option works properly without any new code,
> it just won't accomplish anything without adding appropriate code to
> make it happen.)
> 
> You'll also see I have assumed that the new option won't exist in a SMALL
> shell (the kind of thing that goes on boot media, etc) - if that remains
> all the code that uses (references in any way) the option needs to remain
> inside
> 	#ifndef SMALL
> 	#endif
> blocks.
> Be wary of bloating SMALL shells, it can break boot media space limits.
> 
> kre
> 
> Index: mkoptions.sh
> ===================================================================
> RCS file: /cvsroot/src/bin/sh/mkoptions.sh,v
> retrieving revision 1.8
> diff -u -r1.8 mkoptions.sh
> --- mkoptions.sh	16 Apr 2024 23:30:19 -0000	1.8
> +++ mkoptions.sh	22 Sep 2024 09:26:41 -0000
> @@ -95,6 +95,7 @@
>  
>  	case "${chr}" in
>  	-)	chr= set= dflt="$4";;
> +	+)	chr= ;;
>  	''|?)	;;
>  	*)	printf >&2 'flag "%s": Not a character\n' "${chr}"; continue;;
>  	esac
> Index: option.list
> ===================================================================
> RCS file: /cvsroot/src/bin/sh/option.list,v
> retrieving revision 1.10
> diff -u -r1.10 option.list
> --- option.list	18 Sep 2022 06:03:19 -0000	1.10
> +++ option.list	22 Sep 2024 09:26:41 -0000
> @@ -62,12 +62,13 @@
>  cdprint	cdprint				# always print result of a cd
>  usefork	fork		F		# use fork(2) instead of vfork(2)
>  pflag	nopriv		p		# preserve privs if set[ug]id
> -posix	posix				# be closer to POSIX compat
> +posix	posix		+ p		# be closer to POSIX compat
>  qflag	quietprofile	q		# disable -v/-x in startup files
>  fnline1	local_lineno	L on		# number lines in funcs starting at 1
>  promptcmds promptcmds			# allow $( ) in PS1 (et al).
>  pipefail pipefail			# pipe exit status
>  Xflag	xlock		X #ifndef SMALL	# sticky stderr for -x (implies -x)
> +VARNAME	OPTIONNAME	+ p #ifndef SMALL # allow subdir PATH searches
>  
>  // editline/history related options ("vi" is standard, 'V' and others are not)
>  // only one of vi/emacs can be set, hence the "set" definition, value
> 
> 

-- 
        Thierry Laronde <tlaronde +AT+ kergis +dot+ com>
                     http://www.kergis.com/
                    http://kertex.kergis.com/
Key fingerprint = 0FF7 E906 FBAF FE95 FD89  250D 52B1 AE95 6006 F40C


Home | Main Index | Thread Index | Old Index