Commit 46824d0e authored by Lennart Poettering's avatar Lennart Poettering
Browse files

util: properly identify pty devices by their major

parent 3eb4d9a2
......@@ -2865,7 +2865,7 @@ int getttyname_harder(int fd, char **r) {
if (streq(s, "tty")) {
free(s);
return get_ctty(r);
return get_ctty(r, NULL);
}
*r = s;
......@@ -2907,7 +2907,7 @@ int get_ctty_devnr(dev_t *d) {
return 0;
}
int get_ctty(char **r) {
int get_ctty(char **r, dev_t *_devnr) {
int k;
char fn[128], *s, *b, *p;
dev_t devnr;
......@@ -2925,6 +2925,18 @@ int get_ctty(char **r) {
if (k != -ENOENT)
return k;
/* This is an ugly hack */
if (major(devnr) == 136) {
if (asprintf(&b, "pts/%lu", (unsigned long) minor(devnr)) < 0)
return -ENOMEM;
*r = b;
if (_devnr)
*_devnr = devnr;
return 0;
}
/* Probably something like the ptys which have no
* symlink in /dev/char. Let's return something
* vaguely useful. */
......@@ -2933,6 +2945,9 @@ int get_ctty(char **r) {
return -ENOMEM;
*r = b;
if (_devnr)
*_devnr = devnr;
return 0;
}
......@@ -2950,6 +2965,9 @@ int get_ctty(char **r) {
return -ENOMEM;
*r = b;
if (_devnr)
*_devnr = devnr;
return 0;
}
......
......@@ -337,7 +337,7 @@ int getttyname_malloc(int fd, char **r);
int getttyname_harder(int fd, char **r);
int get_ctty_devnr(dev_t *d);
int get_ctty(char **r);
int get_ctty(char **r, dev_t *_devnr);
int chmod_and_chown(const char *path, mode_t mode, uid_t uid, gid_t gid);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment