fix up adb to prefer /sbin/sh if it exists

FPIIM-953

Change-Id: I5ec9cec9b38009b4ef752396498a2e12a323da0d
Signed-off-by: Luca Weiss <luca@z3ntu.xyz>
diff --git a/adb/services.cpp b/adb/services.cpp
index 1847447..f2d307d 100644
--- a/adb/services.cpp
+++ b/adb/services.cpp
@@ -342,8 +342,10 @@
 
 #if ADB_HOST
 #define SHELL_COMMAND "/bin/sh"
+#define ALTERNATE_SHELL_COMMAND ""
 #else
 #define SHELL_COMMAND "/system/bin/sh"
+#define ALTERNATE_SHELL_COMMAND "/sbin/sh"
 #endif
 
 #if !ADB_HOST
@@ -384,6 +386,9 @@
     int ret_fd;
     pid_t pid = -1;
 
+    const char* shell_command;
+    struct stat st;
+
     const char *arg0, *arg1;
     if (name == 0 || *name == 0) {
         arg0 = "-"; arg1 = 0;
@@ -391,12 +396,19 @@
         arg0 = "-c"; arg1 = name;
     }
 
+    if (stat(ALTERNATE_SHELL_COMMAND, &st) == 0) {
+        shell_command = ALTERNATE_SHELL_COMMAND;
+    }
+    else {
+        shell_command = SHELL_COMMAND;
+    }
+
     switch (mode) {
     case SUBPROC_PTY:
-        ret_fd = create_subproc_pty(SHELL_COMMAND, arg0, arg1, &pid);
+        ret_fd = create_subproc_pty(shell_command, arg0, arg1, &pid);
         break;
     case SUBPROC_RAW:
-        ret_fd = create_subproc_raw(SHELL_COMMAND, arg0, arg1, &pid);
+        ret_fd = create_subproc_raw(shell_command, arg0, arg1, &pid);
         break;
     default:
         fprintf(stderr, "invalid subproc_mode %d\n", mode);