diff options
-rw-r--r-- | adb/usb_vendors.c | 3 | ||||
-rw-r--r-- | adb/usb_windows.c | 6 | ||||
-rw-r--r-- | debuggerd/tombstone.c | 2 | ||||
-rw-r--r-- | init/builtins.c | 1 | ||||
-rw-r--r-- | libpixelflinger/fixed.cpp | 3 | ||||
-rw-r--r-- | libsysutils/src/SocketClient.cpp | 10 | ||||
-rw-r--r-- | rootdir/init.rc | 2 | ||||
-rw-r--r-- | toolbox/rm.c | 53 | ||||
-rw-r--r-- | toolbox/rmmod.c | 11 |
9 files changed, 65 insertions, 26 deletions
diff --git a/adb/usb_vendors.c b/adb/usb_vendors.c index ed86b34..b988115 100644 --- a/adb/usb_vendors.c +++ b/adb/usb_vendors.c @@ -123,6 +123,8 @@ #define VENDOR_ID_INQ_MOBILE 0x2314 // Sony's USB Vendor ID #define VENDOR_ID_SONY 0x054C +// Lab126's USB Vendor ID +#define VENDOR_ID_LAB126 0x1949 // Yulong Coolpad's USB Vendor ID #define VENDOR_ID_YULONG_COOLPAD 0x1EBF @@ -172,6 +174,7 @@ int builtInVendorIds[] = { VENDOR_ID_QUANTA, VENDOR_ID_INQ_MOBILE, VENDOR_ID_SONY, + VENDOR_ID_LAB126, VENDOR_ID_YULONG_COOLPAD, }; diff --git a/adb/usb_windows.c b/adb/usb_windows.c index b216999..251bf17 100644 --- a/adb/usb_windows.c +++ b/adb/usb_windows.c @@ -255,7 +255,7 @@ usb_handle* do_usb_open(const wchar_t* interface_name) { } int usb_write(usb_handle* handle, const void* data, int len) { - unsigned long time_out = 500 + len * 8; + unsigned long time_out = 5000; unsigned long written = 0; int ret; @@ -300,7 +300,7 @@ int usb_write(usb_handle* handle, const void* data, int len) { } int usb_read(usb_handle *handle, void* data, int len) { - unsigned long time_out = 500 + len * 8; + unsigned long time_out = 0; unsigned long read = 0; int ret; @@ -322,7 +322,7 @@ int usb_read(usb_handle *handle, void* data, int len) { if (len == 0) return 0; - } else if (saved_errno != ERROR_SEM_TIMEOUT) { + } else { // assume ERROR_INVALID_HANDLE indicates we are disconnected if (saved_errno == ERROR_INVALID_HANDLE) usb_kick(handle); diff --git a/debuggerd/tombstone.c b/debuggerd/tombstone.c index 2e92846..16b4943 100644 --- a/debuggerd/tombstone.c +++ b/debuggerd/tombstone.c @@ -336,13 +336,11 @@ static void dump_nearby_maps(const ptrace_context_t* context, log_t* log, pid_t * Search for a match, or for a hole where the match would be. The list * is backward from the file content, so it starts at high addresses. */ - bool found = false; map_info_t* map = context->map_info_list; map_info_t *next = NULL; map_info_t *prev = NULL; while (map != NULL) { if (addr >= map->start && addr < map->end) { - found = true; next = map->next; break; } else if (addr >= map->end) { diff --git a/init/builtins.c b/init/builtins.c index a7e34a6..ac9585e 100644 --- a/init/builtins.c +++ b/init/builtins.c @@ -332,6 +332,7 @@ static struct { unsigned flag; } mount_flags[] = { { "noatime", MS_NOATIME }, + { "noexec", MS_NOEXEC }, { "nosuid", MS_NOSUID }, { "nodev", MS_NODEV }, { "nodiratime", MS_NODIRATIME }, diff --git a/libpixelflinger/fixed.cpp b/libpixelflinger/fixed.cpp index 5b92062..5094537 100644 --- a/libpixelflinger/fixed.cpp +++ b/libpixelflinger/fixed.cpp @@ -62,7 +62,8 @@ int32_t gglRecipQ(GGLfixed x, int q) int shift; x = gglRecipQNormalized(x, &shift); shift += 16-q; - x += 1L << (shift-1); // rounding + if (shift > 0) + x += 1L << (shift-1); // rounding x >>= shift; return x; } diff --git a/libsysutils/src/SocketClient.cpp b/libsysutils/src/SocketClient.cpp index 4a1227f..3d4984d 100644 --- a/libsysutils/src/SocketClient.cpp +++ b/libsysutils/src/SocketClient.cpp @@ -131,11 +131,6 @@ char *SocketClient::quoteArg(const char *arg) { int SocketClient::sendMsg(const char *msg) { - if (mSocket < 0) { - errno = EHOSTUNREACH; - return -1; - } - // Send the message including null character if (sendData(msg, strlen(msg) + 1) != 0) { SLOGW("Unable to send msg '%s'", msg); @@ -158,6 +153,11 @@ int SocketClient::sendDataLocked(const void *data, int len) { const char *p = (const char*) data; int brtw = len; + if (mSocket < 0) { + errno = EHOSTUNREACH; + return -1; + } + if (len == 0) { return 0; } diff --git a/rootdir/init.rc b/rootdir/init.rc index e1371df..25e6750 100644 --- a/rootdir/init.rc +++ b/rootdir/init.rc @@ -32,7 +32,7 @@ loglevel 3 export ANDROID_DATA /data export ASEC_MOUNTPOINT /mnt/asec export LOOP_MOUNTPOINT /mnt/obb - export BOOTCLASSPATH /system/framework/core.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/apache-xml.jar + export BOOTCLASSPATH /system/framework/core.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/telephony-common.jar:/system/framework/mms-common.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/apache-xml.jar # Backward compatibility symlink /system/etc /etc diff --git a/toolbox/rm.c b/toolbox/rm.c index bd66311..3a24bec 100644 --- a/toolbox/rm.c +++ b/toolbox/rm.c @@ -7,14 +7,17 @@ #include <sys/stat.h> #include <sys/types.h> +#define OPT_RECURSIVE 1 +#define OPT_FORCE 2 + static int usage() { - fprintf(stderr,"rm [-rR] <target>\n"); + fprintf(stderr,"Usage: rm [-rR] [-f] <target>\n"); return -1; } /* return -1 on failure, with errno set to the first error */ -static int unlink_recursive(const char* name) +static int unlink_recursive(const char* name, int flags) { struct stat st; DIR *dir; @@ -23,7 +26,7 @@ static int unlink_recursive(const char* name) /* is it a file or directory? */ if (lstat(name, &st) < 0) - return -1; + return ((flags & OPT_FORCE) && errno == ENOENT) ? 0 : -1; /* a file, so unlink it */ if (!S_ISDIR(st.st_mode)) @@ -41,7 +44,7 @@ static int unlink_recursive(const char* name) if (!strcmp(de->d_name, "..") || !strcmp(de->d_name, ".")) continue; sprintf(dn, "%s/%s", name, de->d_name); - if (unlink_recursive(dn) < 0) { + if (unlink_recursive(dn, flags) < 0) { fail = 1; break; } @@ -66,21 +69,45 @@ static int unlink_recursive(const char* name) int rm_main(int argc, char *argv[]) { int ret; - int i = 1; - int recursive = 0; + int i, c; + int flags = 0; if (argc < 2) return usage(); - /* check if recursive */ - if (argc >=2 && (!strcmp(argv[1], "-r") || !strcmp(argv[1], "-R"))) { - recursive = 1; - i = 2; + /* check flags */ + do { + c = getopt(argc, argv, "frR"); + if (c == EOF) + break; + switch (c) { + case 'f': + flags |= OPT_FORCE; + break; + case 'r': + case 'R': + flags |= OPT_RECURSIVE; + break; + } + } while (1); + + if (optind < 1 || optind >= argc) { + usage(); + return -1; } - + /* loop over the file/directory args */ - for (; i < argc; i++) { - int ret = recursive ? unlink_recursive(argv[i]) : unlink(argv[i]); + for (i = optind; i < argc; i++) { + + if (flags & OPT_RECURSIVE) { + ret = unlink_recursive(argv[i], flags); + } else { + ret = unlink(argv[i]); + if (errno == ENOENT && (flags & OPT_FORCE)) { + return 0; + } + } + if (ret < 0) { fprintf(stderr, "rm failed for %s, %s\n", argv[i], strerror(errno)); return -1; diff --git a/toolbox/rmmod.c b/toolbox/rmmod.c index 25257cc..c7e0d6a 100644 --- a/toolbox/rmmod.c +++ b/toolbox/rmmod.c @@ -10,7 +10,7 @@ extern int delete_module(const char *, unsigned int); int rmmod_main(int argc, char **argv) { - int ret; + int ret, i; char *modname, *dot; /* make sure we've got an argument */ @@ -31,6 +31,15 @@ int rmmod_main(int argc, char **argv) if (dot) *dot = '\0'; + /* Replace "-" with "_". This would keep rmmod + * compatible with module-init-tools version of + * rmmod + */ + for (i = 0; modname[i] != '\0'; i++) { + if (modname[i] == '-') + modname[i] = '_'; + } + /* pass it to the kernel */ ret = delete_module(modname, O_NONBLOCK | O_EXCL); if (ret != 0) { |