rc.d/varsym: Rewrite following rc.d/sysctl
authorAaron LI <aly@aaronly.me>
Thu, 13 Dec 2018 05:53:54 +0000 (13:53 +0800)
committerAaron LI <aly@aaronly.me>
Thu, 20 Dec 2018 02:26:00 +0000 (10:26 +0800)
* Rewrite this script following the same logic and style of rc.d/sysctl.
  The basic syntax is checked before setting it.

* Clarify the /etc/varsym.conf syntax in the man page.

Reviewed-by: swildner
etc/rc.d/varsym
share/man/man5/varsym.conf.5

index 0048519..36f258b 100644 (file)
@@ -1,35 +1,39 @@
 #!/bin/sh
 
-# $DragonFly: src/etc/rc.d/varsym,v 1.2 2005/11/19 21:47:32 swildner Exp $
-#
-
 # PROVIDE: varsym
 # REQUIRE: mountcritremote
 
 . /etc/rc.subr
 
 name=varsym
-rcvar='varsym_enable'
+rcvar="varsym_enable"
 required_files="/etc/varsym.conf"
 start_cmd="varsym_start"
 stop_cmd=":"
 
 varsym_start()
 {
-       if [ -f /etc/varsym.conf ]; then
-        while read sym
-                do
-                        case ${sym} in
-                        \#*|' ')
-                                ;;
-                        *)
-                        varsym -s ${sym}
-                        esac
-                done < /etc/varsym.conf
-        fi
-
+       local line
+
+       if [ ! -f "/etc/varsym.conf" ]; then
+               return
+       fi
+
+       # NOTE: Do not miss the last line when it does not end with a LF.
+       while read -r line || [ -n "${line}" ]; do
+               case ${line} in
+               \#*|'')
+                       ;;
+               *[^=\ ]=[^=\ ]*)
+                       debug "varsym -s ${line}"
+                       eval varsym -s ${line}
+                       ;;
+               *)
+                       warn "invalid syntax: '${line}'"
+                       ;;
+               esac
+       done < /etc/varsym.conf
 }
 
 load_rc_config $name
 run_rc_command "$1"
-
index 5a635dd..e7282f5 100644 (file)
@@ -29,7 +29,7 @@
 .\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd May 11, 2007
+.Dd December 19, 2018
 .Dt VARSYM.CONF 5
 .Os
 .Sh NAME
@@ -42,12 +42,24 @@ variables
 .Sh DESCRIPTION
 The
 .Nm
-file specifies a list of variables that can then be used in variant symlinks.
-Each line has the format
-.Li var=data .
+file specifies a list of system-wide variables that can then be used in
+variant symlinks.
+Each line specifies one variable and its data in the same format of the
+.Xr varsym 1
+command, i.e.,
+.Bd -literal -offset indent
+var=data
+"variable name"="variable data"
+.Ed
+.Pp
+Spaces are not allowed around the
+.Dq =
+sign.
+Both the variable name and data can contain spaces but must be quoted.
 Empty lines or lines beginning with a
 .Dq #
 are ignored.
+Inline comments should not be used.
 .Pp
 Processing
 .Nm