Use shell builtins instead of awk and sed.

Avoids problems with awk processing floating point numbers when LC_NUMERIC
give a decimal point of ','.
Fixes PR/42321
This commit is contained in:
dsl 2009-11-15 13:39:00 +00:00
parent dcfde2a0ef
commit 3f7c0ec34d
1 changed files with 28 additions and 13 deletions

View File

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
# #
# $NetBSD: osrelease.sh,v 1.117 2009/10/29 06:33:27 apb Exp $ # $NetBSD: osrelease.sh,v 1.118 2009/11/15 13:39:00 dsl Exp $
# #
# Copyright (c) 1997 The NetBSD Foundation, Inc. # Copyright (c) 1997 The NetBSD Foundation, Inc.
# All rights reserved. # All rights reserved.
@ -32,28 +32,43 @@
# We use the number specified in <sys/param.h> # We use the number specified in <sys/param.h>
AWK=${AWK:-awk} path="./$0"
SED=${TOOL_SED:-sed} exec < ${path%/*}/../sys/param.h
PARAMH="`dirname $0`"/../sys/param.h
release=`$AWK '/^#define[ ]*__NetBSD_Version__/ { print $6 }' $PARAMH`
# default: return nn.nn.nn while
# -m: return nn, representing only the major number; however, for -current, read define ver_tag release comment || exit 1
do
[ "$define" = "#define" ] || continue;
[ "$ver_tag" = "__NetBSD_Version__" ] || continue
break
done
# ${release} is [M]Mmm00pp00
#
# default: return MM.mm.pp
# -m: return MM, representing only the major number; however, for -current,
# return the next major number (e.g. for 5.99.nn, return 6) # return the next major number (e.g. for 5.99.nn, return 6)
# -n: return nn.nn # -n: return MM.mm
# -s: return nnnnnn (no dots) # -s: return MMmmpp (no dots)
release=${release%??}
rel_MMmm=${release%????}
rel_MM=${rel_MMmm%??}
rel_mm=${rel_MMmm#${rel_MM}}
rel_pp=${release#${rel_MMmm}00}
case $1 in case $1 in
-m) -m)
echo $release | $AWK -F. '{print int($1+$2/100+0.01)}' echo "$(((${rel_MMmm}+1)/100))"
;; ;;
-n) -n)
echo $release | $AWK -F. '{print $1 "." $2}' echo "$rel_MM.$rel_mm"
;; ;;
-s) -s)
echo $release | $SED -e 's,\.,,g' echo "$rel_MM$rel_mm$rel_pp"
;; ;;
*) *)
echo $release echo "$rel_MM.$rel_mm.$rel_pp"
;; ;;
esac esac