Fix const-ness of strrchr callers.

This causes build failures in google3 where they use GCC. glibc only
provides const-correct overloads for string functions for GCC >= 4.4,
but clang -- which is what we use -- pretends to be GCC 4.2.

Change-Id: I2a054823ea6201ebcea46d5e77b80a975eefc622
diff --git a/adb/adb_utils.cpp b/adb/adb_utils.cpp
index cd3c7bc..6fa6c2e 100644
--- a/adb/adb_utils.cpp
+++ b/adb/adb_utils.cpp
@@ -72,16 +72,17 @@
   return result;
 }
 
-int mkdirs(const char *path)
-{
+int mkdirs(const std::string& path) {
+    // TODO: rewrite this function and merge it with the *other* mkdirs in adb.
+    std::unique_ptr<char> path_rw(strdup(path.c_str()));
     int ret;
-    char *x = (char *)path + 1;
+    char* x = path_rw.get() + 1;
 
     for(;;) {
-        x = adb_dirstart(x);
+        x = const_cast<char*>(adb_dirstart(x));
         if(x == 0) return 0;
         *x = 0;
-        ret = adb_mkdir(path, 0775);
+        ret = adb_mkdir(path_rw.get(), 0775);
         *x = OS_PATH_SEPARATOR;
         if((ret < 0) && (errno != EEXIST)) {
             return ret;
diff --git a/adb/adb_utils.h b/adb/adb_utils.h
index d1a3f5f..673aaac 100644
--- a/adb/adb_utils.h
+++ b/adb/adb_utils.h
@@ -22,7 +22,7 @@
 bool getcwd(std::string* cwd);
 bool directory_exists(const std::string& path);
 
-int mkdirs(const char *path);
+int mkdirs(const std::string& path);
 
 std::string escape_arg(const std::string& s);
 
diff --git a/adb/commandline.cpp b/adb/commandline.cpp
index f190336..d54faec 100644
--- a/adb/commandline.cpp
+++ b/adb/commandline.cpp
@@ -487,8 +487,8 @@
     const uint8_t* ptr = reinterpret_cast<const uint8_t*>(data);
 
     if (show_progress) {
-        char *x = strrchr(service, ':');
-        if(x) service = x + 1;
+        const char* x = strrchr(service, ':');
+        if (x) service = x + 1;
     }
 
     while (sz > 0) {
@@ -1496,7 +1496,7 @@
     int last_apk = -1;
     for (i = argc - 1; i >= 0; i--) {
         const char* file = argv[i];
-        char* dot = strrchr(file, '.');
+        const char* dot = strrchr(file, '.');
         if (dot && !strcasecmp(dot, ".apk")) {
             if (stat(file, &sb) == -1 || !S_ISREG(sb.st_mode)) {
                 fprintf(stderr, "Invalid APK file: %s\n", file);
@@ -1542,7 +1542,7 @@
     int first_apk = -1;
     for (i = argc - 1; i >= 0; i--) {
         const char* file = argv[i];
-        char* dot = strrchr(file, '.');
+        const char* dot = strrchr(file, '.');
         if (dot && !strcasecmp(dot, ".apk")) {
             if (stat(file, &sb) == -1 || !S_ISREG(sb.st_mode)) {
                 fprintf(stderr, "Invalid APK file: %s\n", file);
diff --git a/adb/file_sync_service.cpp b/adb/file_sync_service.cpp
index e8e9a0f..2067836 100644
--- a/adb/file_sync_service.cpp
+++ b/adb/file_sync_service.cpp
@@ -53,7 +53,7 @@
     if(name[0] != '/') return -1;
 
     for(;;) {
-        x = adb_dirstart(x);
+        x = const_cast<char*>(adb_dirstart(x));
         if(x == 0) return 0;
         *x = 0;
         if (should_use_fs_config(name)) {
diff --git a/adb/sysdeps.h b/adb/sysdeps.h
index 6160923..729bbcb 100644
--- a/adb/sysdeps.h
+++ b/adb/sysdeps.h
@@ -247,10 +247,10 @@
     return p;
 }
 
-static __inline__  char*  adb_dirstop( const char*  path )
+static __inline__  const char*  adb_dirstop( const char*  path )
 {
-    char*  p  = strrchr(path, '/');
-    char*  p2 = strrchr(path, '\\');
+    const char*  p  = strrchr(path, '/');
+    const char*  p2 = strrchr(path, '\\');
 
     if ( !p )
         p = p2;
@@ -521,12 +521,12 @@
 {
 }
 
-static __inline__ char*  adb_dirstart(const char*  path)
+static __inline__ const char*  adb_dirstart(const char*  path)
 {
     return strchr(path, '/');
 }
 
-static __inline__ char*  adb_dirstop(const char*  path)
+static __inline__ const char*  adb_dirstop(const char*  path)
 {
     return strrchr(path, '/');
 }
diff --git a/adb/usb_linux.cpp b/adb/usb_linux.cpp
index e570ef5..dd22712 100644
--- a/adb/usb_linux.cpp
+++ b/adb/usb_linux.cpp
@@ -264,14 +264,12 @@
 
                             // Determine the device path
                         if (!fstat(fd, &st) && S_ISCHR(st.st_mode)) {
-                            char *slash;
-                            ssize_t link_len;
                             snprintf(pathbuf, sizeof(pathbuf), "/sys/dev/char/%d:%d",
                                      major(st.st_rdev), minor(st.st_rdev));
-                            link_len = readlink(pathbuf, link, sizeof(link) - 1);
+                            ssize_t link_len = readlink(pathbuf, link, sizeof(link) - 1);
                             if (link_len > 0) {
                                 link[link_len] = '\0';
-                                slash = strrchr(link, '/');
+                                const char* slash = strrchr(link, '/');
                                 if (slash) {
                                     snprintf(pathbuf, sizeof(pathbuf),
                                              "usb:%s", slash + 1);