Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of git+ssh://scm.gforge.inria.fr//gitroot/simgrid/simgrid
[simgrid.git] / src / smpi / smpitools.sh
index 835cd59..a8fc1a3 100644 (file)
@@ -1,8 +1,15 @@
+#!/bin/sh
+
+# Copyright (c) 2013-2014. 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,8 +65,7 @@ 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 () {