diff options
-rw-r--r-- | libbb/getpty.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/libbb/getpty.c b/libbb/getpty.c index bc143c291..4bffd9ae6 100644 --- a/libbb/getpty.c +++ b/libbb/getpty.c | |||
@@ -13,18 +13,26 @@ | |||
13 | int FAST_FUNC xgetpty(char *line) | 13 | int FAST_FUNC xgetpty(char *line) |
14 | { | 14 | { |
15 | int p; | 15 | int p; |
16 | |||
16 | #if ENABLE_FEATURE_DEVPTS | 17 | #if ENABLE_FEATURE_DEVPTS |
17 | p = open("/dev/ptmx", O_RDWR); | 18 | p = open("/dev/ptmx", O_RDWR); |
18 | if (p > 0) { | 19 | if (p > 0) { |
20 | grantpt(p); /* chmod+chown corresponding slave pty */ | ||
21 | unlockpt(p); /* (what does this do?) */ | ||
22 | #if 0 /* if ptsname_r is not available... */ | ||
19 | const char *name; | 23 | const char *name; |
20 | grantpt(p); | 24 | name = ptsname(p); /* find out the name of slave pty */ |
21 | unlockpt(p); | ||
22 | name = ptsname(p); | ||
23 | if (!name) { | 25 | if (!name) { |
24 | bb_perror_msg("ptsname error (is /dev/pts mounted?)"); | 26 | bb_perror_msg_and_die("ptsname error (is /dev/pts mounted?)"); |
25 | goto fail; | ||
26 | } | 27 | } |
27 | safe_strncpy(line, name, GETPTY_BUFSIZE); | 28 | safe_strncpy(line, name, GETPTY_BUFSIZE); |
29 | #else | ||
30 | /* find out the name of slave pty */ | ||
31 | if (ptsname_r(p, line, GETPTY_BUFSIZE-1) != 0) { | ||
32 | bb_perror_msg_and_die("ptsname error (is /dev/pts mounted?)"); | ||
33 | } | ||
34 | line[GETPTY_BUFSIZE-1] = '\0'; | ||
35 | #endif | ||
28 | return p; | 36 | return p; |
29 | } | 37 | } |
30 | #else | 38 | #else |
@@ -52,9 +60,5 @@ int FAST_FUNC xgetpty(char *line) | |||
52 | } | 60 | } |
53 | } | 61 | } |
54 | #endif /* FEATURE_DEVPTS */ | 62 | #endif /* FEATURE_DEVPTS */ |
55 | USE_FEATURE_DEVPTS( fail:) | 63 | bb_error_msg_and_die("can't find free pty"); |
56 | bb_error_msg_and_die("open pty"); | ||
57 | return -1; /* never get here */ | ||
58 | } | 64 | } |
59 | |||
60 | |||