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"



  | 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





Home | Main Index | Thread Index | Old Index