fix for testing whether it's windows or not, had all upper case but Windows_NT is...
[feisty_meow.git] / scripts / core / functions.sh
index d098f8e7461e19def5bffb7752b086183919f62f..eee56fe36c4156e3c8bf6c65aa090bdac4aa5efe 100644 (file)
@@ -107,10 +107,13 @@ if [ -z "$skip_all" ]; then
   # locates a process given a search pattern to match in the process list.
   function psfind() {
     local -a patterns=("${@}")
+#echo ====
+#echo patterns list is: "${patterns[@]}"
+#echo ====
     local PID_DUMP="$(mktemp "$TMP/zz_pidlist.XXXXXX")"
     local -a PIDS_SOUGHT
     if [ "$OS" == "Windows_NT" ]; then
-      # needs to be a windows format filename for 'type' to work.
+      # windows case has some odd gyrations to get the user list.
       if [ ! -d c:/tmp ]; then
         mkdir c:/tmp
       fi
@@ -126,9 +129,11 @@ if [ -z "$skip_all" ]; then
         flag='//c'
       fi
       # we 'type' the file to get rid of the unicode result from wmic.
+      # needs to be a windows format filename for 'type' to work.
       cmd $flag type "$tmppid" >$PID_DUMP
       \rm "$tmppid"
-      local appropriate_pattern="s/^.*  *\([0-9][0-9]*\) *\$/\1/p"
+      local appropriate_pattern='s/^.*[[:space:]][[:space:]]*\([0-9][0-9]*\) *\$/\1/p'
+      local i
       for i in "${patterns[@]}"; do
         PIDS_SOUGHT+=($(cat $PID_DUMP \
           | grep -i "$i" \
@@ -136,17 +141,29 @@ if [ -z "$skip_all" ]; then
       done
     else
       /bin/ps $extra_flags wuax >$PID_DUMP
+#echo ====
+#echo got all this stuff in the pid dump file:
+#cat $PID_DUMP
+#echo ====
       # pattern to use for peeling off the process numbers.
-      local appropriate_pattern='s/^[-a-zA-Z_0-9][-a-zA-Z_0-9]*  *\([0-9][0-9]*\).*$/\1/p'
+      local appropriate_pattern='s/^[-+a-zA-Z_0-9][-+a-zA-Z_0-9]*[[:space:]][[:space:]]*\([0-9][0-9]*\).*$/\1/p'
       # remove the first line of the file, search for the pattern the
       # user wants to find, and just pluck the process ids out of the
       # results.
+      local i
       for i in "${patterns[@]}"; do
+#echo pattern is $i
+#echo phase 1: $(cat $PID_DUMP | sed -e '1d' )
+#echo phase 2: $(cat $PID_DUMP | sed -e '1d' | grep -i "$i" )
         PIDS_SOUGHT+=($(cat $PID_DUMP \
           | sed -e '1d' \
           | grep -i "$i" \
           | sed -n -e "$appropriate_pattern"))
       done
+#echo ====
+#echo pids sought list became:
+#echo "${PIDS_SOUGHT[@]}"
+#echo ====
     fi
     if [ ${#PIDS_SOUGHT[*]} -ne 0 ]; then
       local PIDS_SOUGHT2=$(printf -- '%s\n' ${PIDS_SOUGHT[@]} | sort | uniq)
@@ -220,11 +237,22 @@ if [ -z "$skip_all" ]; then
   # switches from a /X/path form to an X:/ form.  this also processes cygwin paths.
   function unix_to_dos_path() {
     # we usually remove dos slashes in favor of forward slashes.
+    local DOSSYHOME
+    if [[ ! "$OS" =~ ^[Ww][iI][nN] ]]; then
+      # fake this value for non-windows (non-cygwin) platforms.
+      DOSSYHOME="$HOME"
+    else
+      # for cygwin, we must replace the /home/X path with an absolute one, since cygwin
+      # insists on the /home form instead of /c/cygwin/home being possible.  this is
+      # super frustrating and nightmarish.
+      DOSSYHOME="$(cygpath -am "$HOME")"
+    fi
+
     if [ ! -z "$SERIOUS_SLASH_TREATMENT" ]; then
       # unless this flag is set, in which case we force dos slashes.
-      echo "$1" | sed -e 's/\\/\//g' | sed -e 's/\/cygdrive//' | sed -e 's/\/\([a-zA-Z]\)\/\(.*\)/\1:\/\2/' | sed -e 's/\//\\/g'
+      echo "$1" | sed -e "s?^$HOME?$DOSSYHOME?g" | sed -e 's/\\/\//g' | sed -e 's/\/cygdrive//' | sed -e 's/\/\([a-zA-Z]\)\/\(.*\)/\1:\/\2/' | sed -e 's/\//\\/g'
     else
-      echo "$1" | sed -e 's/\\/\//g' | sed -e 's/\/cygdrive//' | sed -e 's/\/\([a-zA-Z]\)\/\(.*\)/\1:\/\2/'
+      echo "$1" | sed -e "s?^$HOME?$DOSSYHOME?g" | sed -e 's/\\/\//g' | sed -e 's/\/cygdrive//' | sed -e 's/\/\([a-zA-Z]\)\/\(.*\)/\1:\/\2/'
     fi
   }