Loading init/devices.cpp +32 −13 Original line number Diff line number Diff line Loading @@ -14,21 +14,23 @@ * limitations under the License. */ #include <dirent.h> #include <errno.h> #include <fcntl.h> #include <fnmatch.h> #include <libgen.h> #include <stddef.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <sys/stat.h> #include <sys/time.h> #include <sys/types.h> #include <fcntl.h> #include <dirent.h> #include <sys/un.h> #include <sys/wait.h> #include <unistd.h> #include <string.h> #include <sys/socket.h> #include <sys/un.h> #include <linux/netlink.h> #include <memory> Loading @@ -39,8 +41,6 @@ #include <selinux/avc.h> #include <private/android_filesystem_config.h> #include <sys/time.h> #include <sys/wait.h> #include <android-base/file.h> #include <android-base/stringprintf.h> Loading Loading @@ -541,30 +541,49 @@ static char **get_block_device_symlinks(struct uevent *uevent) return links; } static void make_link_init(const char* oldpath, const char* newpath) { const char* slash = strrchr(newpath, '/'); if (!slash) return; if (mkdir_recursive(dirname(newpath), 0755)) { PLOG(ERROR) << "Failed to create directory " << dirname(newpath); } if (symlink(oldpath, newpath) && errno != EEXIST) { PLOG(ERROR) << "Failed to symlink " << oldpath << " to " << newpath; } } static void remove_link(const char* oldpath, const char* newpath) { std::string path; if (android::base::Readlink(newpath, &path) && path == oldpath) unlink(newpath); } static void handle_device(const char *action, const char *devpath, const char *path, int block, int major, int minor, char **links) { int i; if(!strcmp(action, "add")) { make_device(devpath, path, block, major, minor, (const char **)links); if (links) { for (i = 0; links[i]; i++) for (int i = 0; links[i]; i++) { make_link_init(devpath, links[i]); } } } if(!strcmp(action, "remove")) { if (links) { for (i = 0; links[i]; i++) for (int i = 0; links[i]; i++) { remove_link(devpath, links[i]); } } unlink(devpath); } if (links) { for (i = 0; links[i]; i++) for (int i = 0; links[i]; i++) { free(links[i]); } free(links); } } Loading init/util.cpp +0 −34 Original line number Diff line number Diff line Loading @@ -270,40 +270,6 @@ void sanitize(char *s) } } void make_link_init(const char *oldpath, const char *newpath) { int ret; char buf[256]; const char *slash; int width; slash = strrchr(newpath, '/'); if (!slash) return; width = slash - newpath; if (width <= 0 || width > (int)sizeof(buf) - 1) return; memcpy(buf, newpath, width); buf[width] = 0; ret = mkdir_recursive(buf, 0755); if (ret) PLOG(ERROR) << "Failed to create directory " << buf; ret = symlink(oldpath, newpath); if (ret && errno != EEXIST) PLOG(ERROR) << "Failed to symlink " << oldpath << " to " << newpath; } void remove_link(const char *oldpath, const char *newpath) { char path[256]; ssize_t ret; ret = readlink(newpath, path, sizeof(path) - 1); if (ret <= 0) return; path[ret] = 0; if (!strcmp(path, oldpath)) unlink(newpath); } int wait_for_file(const char *filename, int timeout) { struct stat info; Loading init/util.h +0 −2 Original line number Diff line number Diff line Loading @@ -51,8 +51,6 @@ unsigned int decode_uid(const char *s); int mkdir_recursive(const char *pathname, mode_t mode); void sanitize(char *p); void make_link_init(const char *oldpath, const char *newpath); void remove_link(const char *oldpath, const char *newpath); int wait_for_file(const char *filename, int timeout); void import_kernel_cmdline(bool in_qemu, const std::function<void(const std::string&, const std::string&, bool)>&); Loading Loading
init/devices.cpp +32 −13 Original line number Diff line number Diff line Loading @@ -14,21 +14,23 @@ * limitations under the License. */ #include <dirent.h> #include <errno.h> #include <fcntl.h> #include <fnmatch.h> #include <libgen.h> #include <stddef.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <sys/stat.h> #include <sys/time.h> #include <sys/types.h> #include <fcntl.h> #include <dirent.h> #include <sys/un.h> #include <sys/wait.h> #include <unistd.h> #include <string.h> #include <sys/socket.h> #include <sys/un.h> #include <linux/netlink.h> #include <memory> Loading @@ -39,8 +41,6 @@ #include <selinux/avc.h> #include <private/android_filesystem_config.h> #include <sys/time.h> #include <sys/wait.h> #include <android-base/file.h> #include <android-base/stringprintf.h> Loading Loading @@ -541,30 +541,49 @@ static char **get_block_device_symlinks(struct uevent *uevent) return links; } static void make_link_init(const char* oldpath, const char* newpath) { const char* slash = strrchr(newpath, '/'); if (!slash) return; if (mkdir_recursive(dirname(newpath), 0755)) { PLOG(ERROR) << "Failed to create directory " << dirname(newpath); } if (symlink(oldpath, newpath) && errno != EEXIST) { PLOG(ERROR) << "Failed to symlink " << oldpath << " to " << newpath; } } static void remove_link(const char* oldpath, const char* newpath) { std::string path; if (android::base::Readlink(newpath, &path) && path == oldpath) unlink(newpath); } static void handle_device(const char *action, const char *devpath, const char *path, int block, int major, int minor, char **links) { int i; if(!strcmp(action, "add")) { make_device(devpath, path, block, major, minor, (const char **)links); if (links) { for (i = 0; links[i]; i++) for (int i = 0; links[i]; i++) { make_link_init(devpath, links[i]); } } } if(!strcmp(action, "remove")) { if (links) { for (i = 0; links[i]; i++) for (int i = 0; links[i]; i++) { remove_link(devpath, links[i]); } } unlink(devpath); } if (links) { for (i = 0; links[i]; i++) for (int i = 0; links[i]; i++) { free(links[i]); } free(links); } } Loading
init/util.cpp +0 −34 Original line number Diff line number Diff line Loading @@ -270,40 +270,6 @@ void sanitize(char *s) } } void make_link_init(const char *oldpath, const char *newpath) { int ret; char buf[256]; const char *slash; int width; slash = strrchr(newpath, '/'); if (!slash) return; width = slash - newpath; if (width <= 0 || width > (int)sizeof(buf) - 1) return; memcpy(buf, newpath, width); buf[width] = 0; ret = mkdir_recursive(buf, 0755); if (ret) PLOG(ERROR) << "Failed to create directory " << buf; ret = symlink(oldpath, newpath); if (ret && errno != EEXIST) PLOG(ERROR) << "Failed to symlink " << oldpath << " to " << newpath; } void remove_link(const char *oldpath, const char *newpath) { char path[256]; ssize_t ret; ret = readlink(newpath, path, sizeof(path) - 1); if (ret <= 0) return; path[ret] = 0; if (!strcmp(path, oldpath)) unlink(newpath); } int wait_for_file(const char *filename, int timeout) { struct stat info; Loading
init/util.h +0 −2 Original line number Diff line number Diff line Loading @@ -51,8 +51,6 @@ unsigned int decode_uid(const char *s); int mkdir_recursive(const char *pathname, mode_t mode); void sanitize(char *p); void make_link_init(const char *oldpath, const char *newpath); void remove_link(const char *oldpath, const char *newpath); int wait_for_file(const char *filename, int timeout); void import_kernel_cmdline(bool in_qemu, const std::function<void(const std::string&, const std::string&, bool)>&); Loading