Improvement of vconftool/buxton_ensure_group
[platform/core/appfw/vconf-buxton.git] / src / vconf-buxton-tool.sh
index 607a6c1..de96da6 100755 (executable)
@@ -47,10 +47,25 @@ badargs() {
 }
 
 #
+# detects buxton mode
+#
+buxmode=
+if buxtonctl -s check >/dev/null 2>&1
+then
+  buxmode=-s
+elif buxtonctl -d check >/dev/null 2>&1
+then
+  buxmode=-d
+else
+  error "unable to detect buxton mode"
+  exit
+fi
+
+#
 # calls to buxton
 #
 buxton() {
-  buxtonctl "$@"
+  buxtonctl $buxmode -- "$@"
 }
 
 buxton_is_ready() {
@@ -145,7 +160,12 @@ buxton_ensure_group() {
   else
     buxton_make_group "$layer" "$group" || return
   fi
-  [[ -z "$label" ]] || buxton_set_label "$layer" "$group" "$label"
+  if [[ -n "$label" ]] && [[ "$label" != "$(buxton_get_label "$layer" "$group")" ]]
+  then
+    buxton_set_label "$layer" "$group" "$label"
+  else
+    info "group $group in layer $layer already has label $label"
+  fi
 }
 
 buxton_ensure_ready() {
@@ -178,13 +198,21 @@ buxton_unset() {
 #############################################################################################
 
 group=vconf
+context=User
 
 
 # get the layer of the key
 layer_of_key() {
   case "$1/" in
   user/*) echo -n "user";;
-  memory/*) echo -n "temp";;
+  memory/*)
+    if [[ "$buxmode" = '-d' ]]
+    then
+      error "the layer temp isn't available in direct mode"
+      exit
+    fi
+    echo -n "temp"
+    ;;
   *) echo -n "base";;
   esac
 }
@@ -238,17 +266,31 @@ setkey() {
   fi
 }
 
+# calls getopt with negative numbers protection
+mygetopt() {
+  local name="$exe $1" long="$2" short="$3" x=
+  shift 3
+  eval set -- $(
+    for x; do
+      echo -n "'$x'" |
+      sed "s:\(.\)'\(.\):\\1\\\\'\\2:g ; s/^'\(-[0-9.]*\)'\$/'protect-sign:\1'/ ; s/^.*/& /"
+    done
+  )
+  getopt -n "$name" -l "$long" -o "$short" -- "$@" |
+  sed "s/'protect-sign:/'/g"
+}
+
 #
 # ensure existing the group for vconf
 #
-buxton_ensure_group "base" "$group" || exit
+buxton_ensure_group "base" "$group" "$context" || exit
 
 # set the value
 doset() {
   local typ= name= layer= value= smack= force=false instal=false
 
   # scan arguments
-  eval set -- $(getopt -n "$exe set" -l force,install,type:,smack:,group:,user: -o fit:s:g:u: -- "$@")
+  eval set -- $(mygetopt set force,install,type:,smack:,group:,user: fit:s:g:u: "$@")
   while :
   do
     case "$1" in
@@ -269,7 +311,7 @@ doset() {
       shift
       ;;
     -u|-g|--user|--group)
-      warning "option $1 $2 ignored!"
+      info "option $1 $2 ignored!"
       shift 2
       ;;
     --)
@@ -292,7 +334,8 @@ doset() {
   then
     if expr "$name" : memory/ >/dev/null
     then
-      setkey "$typ" "memory_init/$name" "$value" "$smack"
+      setkey "$typ" "memory_init/$name" "$value" "$smack" || exit
+      [[ "$buxmode" = -d ]] && exit
     else
       warning only keys beginning with memory/ are allowing option -i
     fi
@@ -306,7 +349,7 @@ doget() {
   local name= layer= rec=false val=
 
   # scan arguments
-  eval set -- $(getopt -n "$exe get" -l recursive -o r -- "$@")
+  eval set -- $(mygetopt get recursive r "$@")
   if [[ "$1" = "-r" || "$1" = "--recursive" ]]
   then
     rec=true