merge in ics-release history after reset to master
diff --git a/adb/commandline.c b/adb/commandline.c
index 64fbe16..a69f867 100644
--- a/adb/commandline.c
+++ b/adb/commandline.c
@@ -1370,50 +1370,112 @@
return 0;
}
-int install_app(transport_type transport, char* serial, int argc, char** argv)
+static const char* get_basename(const char* filename)
+{
+ const char* basename = adb_dirstop(filename);
+ if (basename) {
+ basename++;
+ return basename;
+ } else {
+ return filename;
+ }
+}
+
+static int check_file(const char* filename)
{
struct stat st;
- int err;
- const char *const DATA_DEST = "/data/local/tmp/%s";
- const char *const SD_DEST = "/sdcard/tmp/%s";
- const char* where = DATA_DEST;
- char to[PATH_MAX];
- char* filename = argv[argc - 1];
- const char* p;
- int i;
- for (i = 0; i < argc; i++) {
- if (!strcmp(argv[i], "-s"))
- where = SD_DEST;
+ if (filename == NULL) {
+ return 0;
}
- p = adb_dirstop(filename);
- if (p) {
- p++;
- snprintf(to, sizeof to, where, p);
- } else {
- snprintf(to, sizeof to, where, filename);
- }
- if (p[0] == '\0') {
- }
-
- err = stat(filename, &st);
- if (err != 0) {
+ if (stat(filename, &st) != 0) {
fprintf(stderr, "can't find '%s' to install\n", filename);
return 1;
}
+
if (!S_ISREG(st.st_mode)) {
- fprintf(stderr, "can't install '%s' because it's not a file\n",
- filename);
+ fprintf(stderr, "can't install '%s' because it's not a file\n", filename);
return 1;
}
- if (!(err = do_sync_push(filename, to, 1 /* verify APK */))) {
- /* file in place; tell the Package Manager to install it */
- argv[argc - 1] = to; /* destination name, not source location */
- pm_command(transport, serial, argc, argv);
- delete_file(transport, serial, to);
+ return 0;
+}
+
+int install_app(transport_type transport, char* serial, int argc, char** argv)
+{
+ static const char *const DATA_DEST = "/data/local/tmp/%s";
+ static const char *const SD_DEST = "/sdcard/tmp/%s";
+ const char* where = DATA_DEST;
+ char apk_dest[PATH_MAX];
+ char verification_dest[PATH_MAX];
+ char* apk_file;
+ char* verification_file = NULL;
+ int file_arg = -1;
+ int err;
+ int i;
+
+ for (i = 1; i < argc; i++) {
+ if (*argv[i] != '-') {
+ file_arg = i;
+ break;
+ } else if (!strcmp(argv[i], "-s")) {
+ where = SD_DEST;
+ }
}
+ if (file_arg < 0) {
+ fprintf(stderr, "can't find filename in arguments");
+ return 1;
+ } else if (file_arg + 2 < argc) {
+ fprintf(stderr, "too many files specified; only takes APK file and verifier file");
+ return 1;
+ }
+
+ apk_file = argv[file_arg];
+
+ if (file_arg != argc - 1) {
+ verification_file = argv[file_arg + 1];
+ }
+
+ if (check_file(apk_file) || check_file(verification_file)) {
+ return 1;
+ }
+
+ snprintf(apk_dest, sizeof apk_dest, where, get_basename(apk_file));
+ if (verification_file != NULL) {
+ snprintf(verification_dest, sizeof(verification_dest), where, get_basename(verification_file));
+
+ if (!strcmp(apk_dest, verification_dest)) {
+ fprintf(stderr, "APK and verification file can't have the same name\n");
+ return 1;
+ }
+ }
+
+ err = do_sync_push(apk_file, apk_dest, 1 /* verify APK */);
+ if (err) {
+ return err;
+ } else {
+ argv[file_arg] = apk_dest; /* destination name, not source location */
+ }
+
+ if (verification_file != NULL) {
+ err = do_sync_push(verification_file, verification_dest, 0 /* no verify APK */);
+ if (err) {
+ goto cleanup_apk;
+ } else {
+ argv[file_arg + 1] = verification_dest; /* destination name, not source location */
+ }
+ }
+
+ pm_command(transport, serial, argc, argv);
+
+ if (verification_file != NULL) {
+ delete_file(transport, serial, verification_dest);
+ }
+
+cleanup_apk:
+ delete_file(transport, serial, apk_dest);
+
return err;
}
diff --git a/toolbox/getevent.c b/toolbox/getevent.c
index e3ab41a..352f6f9 100644
--- a/toolbox/getevent.c
+++ b/toolbox/getevent.c
@@ -175,7 +175,9 @@
if(i == EV_ABS) {
struct input_absinfo abs;
if(ioctl(fd, EVIOCGABS(j * 8 + k), &abs) == 0) {
- printf(" : value %d, min %d, max %d, fuzz %d flat %d", abs.value, abs.minimum, abs.maximum, abs.fuzz, abs.flat);
+ printf(" : value %d, min %d, max %d, fuzz %d, flat %d, resolution %d",
+ abs.value, abs.minimum, abs.maximum, abs.fuzz, abs.flat,
+ abs.resolution);
}
}
count++;