X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/ba66c0a53a3284954996b301af67e23b04513d87..c4000f89d4644c3d7ff6187a62a0930c4d53e683:/src/smpi/smpitools.sh diff --git a/src/smpi/smpitools.sh b/src/smpi/smpitools.sh index 835cd595d0..e40e14476e 100644 --- a/src/smpi/smpitools.sh +++ b/src/smpi/smpitools.sh @@ -1,8 +1,15 @@ +#!/usr/bin/env sh + +# Copyright (c) 2013-2018. The SimGrid Team. +# All rights reserved. + +# This program is free software; you can redistribute it and/or modify it +# under the terms of the license (GNU LGPL) which comes with this package. + SAVEIFS="$IFS" LISTSEP="$(printf '\b')" -# Create a temporary file, with its name of the form $1_XXX$2, where XXX is -# replaced by an unique string. +# Create a temporary file, with its name of the form $1_XXX$2, where XXX is replaced by an unique string. # $1: prefix, $2: suffix mymktemp () { tmp=$(mktemp --suffix="$2" "$1_XXXXXXXXXX" 2> /dev/null) @@ -27,18 +34,28 @@ mymktemp () { # Add a word to the end of a list (words separated by LISTSEP) # $1: list, $2...: words to add list_add () { - local list content + local list content newcontent list="$1" shift - eval content=\"\${$list}\" - IFS="$LISTSEP" - if [ -z "$content" ]; then - content="$*" - else - content="$content${LISTSEP}$*" + if [ $# -gt 0 ]; then + eval content=\"\${$list}\" + IFS="$LISTSEP" + newcontent="$*" + IFS="$SAVEIFS" + if [ -z "$content" ]; then + content="$newcontent" + else + content="$content${LISTSEP}$newcontent" + fi + eval $list=\"\${content}\" + fi +} + +# Like list_add, but only if first word to add ($2) is not empty +list_add_not_empty () { + if [ -n "$2" ]; then + list_add "$@" fi - IFS="$SAVEIFS" - eval $list=\"\${content}\" } # Set contents of a list (words separated by LISTSEP) @@ -48,10 +65,9 @@ list_set () { list_add "$@" } -# Get the content of a list: positional parameters ($1, $2, ...) are set to the -# content of the list +# Get the content of a list: positional parameters ($1, $2, ...) are set to the content of the list # $1: list # usage: eval $(list_get list) list_get () { - printf 'IFS="$LISTSEP"; eval set -- \\$%s; IFS="$SAVEIFS"' "$1" + printf 'IFS="'\$'LISTSEP"; eval set -- \$%s; IFS="'\$'SAVEIFS"\n' "$1" }