diff options
author | Frank Rowand <frank.rowand@sonymobile.com> | 2014-12-10 23:39:05 -0800 |
---|---|---|
committer | Jason Wessel <jason.wessel@windriver.com> | 2014-12-11 14:35:43 -0600 |
commit | 621795dc684065e7f294c4b8f59a204e24217ed6 (patch) | |
tree | 50798e5e54daca4c33a27111e756828bcf4fab49 | |
parent | 202fd1e15d9f08e8061835a138226480f68ae224 (diff) | |
download | agent-proxy-621795dc684065e7f294c4b8f59a204e24217ed6.tar.gz |
kgdb: kdmx agent-proxy: fix incorrect use of ptsname()
Clean up and fix some areas that will be impacted by patches later in the series
- testing for changed pty name was incorrect because ptsname() returns
a global string, change to use ptsname_r()
- change to ptsname_r() universally in preparation for adding status files
Signed-off-by: Frank Rowand <frank.rowand@sonymobile.com>
Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
-rw-r--r-- | kdmx/kdmx.c | 67 |
1 files changed, 49 insertions, 18 deletions
diff --git a/kdmx/kdmx.c b/kdmx/kdmx.c index ee47feb..9c5f2bc 100644 --- a/kdmx/kdmx.c +++ b/kdmx/kdmx.c @@ -16,6 +16,13 @@ * kind, whether express or implied. See the file COPYING for more details. */ +/* + * expose: + * ftruncate(2) + * ptsname_r(3) + */ +#define _GNU_SOURCE + #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -471,8 +478,8 @@ handle_gdb(void) int ret_errno; int old_gdb_fd; int ret; - char *name; - char *old_name; + char name[MAXPATHLEN]; + char old_name[MAXPATHLEN]; debug_opened = 1; response_pending = 1; @@ -513,7 +520,12 @@ handle_gdb(void) response_pending = 0; old_gdb_fd = gdb_fd; - old_name = ptsname(gdb_fd); + + ret = ptsname_r(gdb_fd, old_name, sizeof(old_name)); + if (ret) { + perror("gdb pty ptsname_r() [1]"); + old_name[0] = '\0'; + } ret = close(gdb_fd); if (ret) @@ -525,9 +537,13 @@ handle_gdb(void) exit(EXIT_FAILURE); } - name = ptsname(gdb_fd); - pr_info("%s is slave pty for gdb\n", - name ? name : "ptsname() ERROR"); + ret = ptsname_r(gdb_fd, name, sizeof(name)); + if (ret) { + name[0] = '\0'; + perror("gdb pty ptsname_r() [2]"); + } + + pr_info("%s is slave pty for gdb\n", name); if (strcmp(name, old_name)) pr_err("WARNING: gdb slave pty path has changed\n"); @@ -545,8 +561,8 @@ reset_term(int ret_errno) { int old_term_fd; int ret; - char *name; - char *old_name; + char name[MAXPATHLEN]; + char old_name[MAXPATHLEN]; /* * Terminating minicom will result in reads of @@ -563,7 +579,12 @@ reset_term(int ret_errno) pr_err(" Not an error if terminal emulator exited\n"); old_term_fd = term_fd; - old_name = ptsname(term_fd); + + ret = ptsname_r(term_fd, old_name, sizeof(old_name)); + if (ret) { + old_name[0] = '\0'; + perror("terminal emulator pty ptsname_r() [1]"); + } ret = close(term_fd); if (ret) @@ -575,9 +596,13 @@ reset_term(int ret_errno) exit(EXIT_FAILURE); } - name = ptsname(term_fd); - pr_info("%s is slave pty for terminal emulator\n", - name ? name : "ptsname() ERROR"); + ret = ptsname_r(term_fd, name, sizeof(name)); + if (ret) { + name[0] = '\0'; + perror("terminal emulator pty ptsname_r() [2]"); + } + + pr_info("%s is slave pty for terminal emulator\n", name); if (strcmp(name, old_name)) pr_err("WARNING: terminal emulator slave pty path has changed\n"); @@ -750,8 +775,9 @@ main(int argc, char **argv) int select_nfds; struct termios termios; char serial_port_path[MAXPATHLEN]; - char *name; + char name[MAXPATHLEN]; fd_set readfds; + int ret; /* default serial port */ memset(serial_port_path, 0, sizeof(serial_port_path)); @@ -905,12 +931,17 @@ main(int argc, char **argv) get_pty(&gdb_fd); select_nfds = gdb_fd + 1; - name = ptsname(term_fd); - pr_info("%s is slave pty for terminal emulator\n", - name ? name : "ptsname() ERROR"); + ret = ptsname_r(term_fd, name, sizeof(name)); + if (ret) + perror("terminal emulator pty ptsname_r() [3]"); + + pr_info("%s is slave pty for terminal emulator\n", name); + + ret = ptsname_r(gdb_fd, name, sizeof(name)); + if (ret) + perror("gdb pty ptsname_r() [3]"); - name = ptsname(gdb_fd); - pr_info("%s is slave pty for gdb\n", name ? name : "ptsname() ERROR"); + pr_info("%s is slave pty for gdb\n", name); pr_info("\n"); pr_info("Use <ctrl>C to terminate program\n"); |