aboutsummaryrefslogtreecommitdiffstats
path: root/adb
diff options
context:
space:
mode:
authorChristopher Tate <ctate@google.com>2011-12-12 15:39:07 -0800
committerAndroid Git Automerger <android-git-automerger@android.com>2011-12-12 15:39:07 -0800
commit1f4bada6674e052eb44e174c6abbb0a9948f498a (patch)
tree489dc760a339cab38a2c76d7aa889e13bc73a237 /adb
parent13805ae9595e0e85a98632439abfaf2893630338 (diff)
parent650307df33fc834c251df71c78b00cc0ae6529b7 (diff)
downloadsystem_core-1f4bada6674e052eb44e174c6abbb0a9948f498a.tar.gz
system_core-1f4bada6674e052eb44e174c6abbb0a9948f498a.tar.bz2
system_core-1f4bada6674e052eb44e174c6abbb0a9948f498a.zip
am 650307df: am b1dfffe6: Fix \'adb backup\' on Windows
* commit '650307df33fc834c251df71c78b00cc0ae6529b7': Fix 'adb backup' on Windows
Diffstat (limited to 'adb')
-rw-r--r--adb/commandline.c26
1 files changed, 24 insertions, 2 deletions
diff --git a/adb/commandline.c b/adb/commandline.c
index 9f4ae97b..31ba3acc 100644
--- a/adb/commandline.c
+++ b/adb/commandline.c
@@ -581,9 +581,29 @@ static int logcat(transport_type transport, char* serial, int argc, char **argv)
return 0;
}
+static int mkdirs(char *path)
+{
+ int ret;
+ char *x = path + 1;
+
+ for(;;) {
+ x = adb_dirstart(x);
+ if(x == 0) return 0;
+ *x = 0;
+ ret = adb_mkdir(path, 0775);
+ *x = OS_PATH_SEPARATOR;
+ if((ret < 0) && (errno != EEXIST)) {
+ return ret;
+ }
+ x++;
+ }
+ return 0;
+}
+
static int backup(int argc, char** argv) {
char buf[4096];
- const char* filename = "./backup.ab";
+ char default_name[32];
+ const char* filename = strcpy(default_name, "./backup.ab");
int fd, outFd;
int i, j;
@@ -606,7 +626,9 @@ static int backup(int argc, char** argv) {
/* bare "adb backup" or "adb backup -f filename" are not valid invocations */
if (argc < 2) return usage();
- outFd = adb_open_mode(filename, O_WRONLY | O_CREAT | O_TRUNC, 0640);
+ adb_unlink(filename);
+ mkdirs((char *)filename);
+ outFd = adb_creat(filename, 0640);
if (outFd < 0) {
fprintf(stderr, "adb: unable to open file %s\n", filename);
return -1;