diff options
-rw-r--r-- | lib/controlfields | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/lib/controlfields b/lib/controlfields new file mode 100644 index 0000000..7eda765 --- /dev/null +++ b/lib/controlfields @@ -0,0 +1,110 @@ +#! /bin/sh +# +# opkhelper +# lib/controlfields +# Functions for parsing control fields. +# +# Copyright (C) 2012 Patrick "P. J." McDermott +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Gets a simple control field. +# Parameters: +# package name (if omitted, source package control file is read) +# field name +# Output: +# field value +# Return value: +# 0 on success +# 1 on missing field +# 255 on invalid invocation +#oh_get_simple_field() +#{ +# case ${#} in +# 1) +# _control=../control +# _field=${1} +# ;; +# 2) +# _control=../${1}.pkg/control +# _field=${2} +# ;; +# *) +# return 255 +# ;; +# esac +# +# _value=`sed -n "s/^${_field}:[[:space:]]*\([[:space:]]\)[[:space:]]*$/\\1/p" +# ${_control}` +# +# [ -z "${_value}" ] && return 1 +# echo "${_value}" +# return 0 +#} + +# Gets a folded or multiline control field. +# Parameters: +# package name (if omitted, source package control file is read) +# field name +# Output: +# field value +# Return value: +# 0 on success +# 1 on missing field +# 255 on invalid invocation +#oh_get_folded_multiline_field() +oh_get_field() +{ + case ${#} in + 1) + _control=../control + _field=${1} + ;; + 2) + _control=../${1}.pkg/control + _field=${2} + ;; + *) + return 255 + ;; + esac + + # Force the 'read' utility to read until a line break character. + _OLDIFS="${IFS}" + IFS=' +' + + # Parse the control file. + _value='' + while read -r _line; do + if [ -z ${_value} ]; then + _value=$(echo "${_line}" | sed -n + "s/^${_field}:[[:space:]]*\([[:space:]]\)[[:space:]]*$/\\1/p") + else + if echo "${_line}" | grep '^ ' > /dev/null; then + _value="${_value} +${_line}" + else + break + fi + fi + done < ${_control} + + # Reset the IFS. + IFS="${_OLDIFS}" + + [ -z "${_value}" ] && return 1 + echo "${_value}" + return 0 +} |