bc79a75c |
1 | --- net-tools/slattach.c~ Sun Sep 19 19:04:28 1999 |
2 | +++ net-tools/slattach.c Sun Sep 19 19:35:56 1999 |
3 | @@ -451,27 +451,39 @@ |
4 | static int |
5 | tty_open(char *name, char *speed) |
6 | { |
7 | - char path[PATH_MAX]; |
8 | - register char *sp; |
9 | + char pathbuf[PATH_MAX]; |
10 | + register char *path_open, *path_lock; |
11 | int fd; |
12 | |
13 | /* Try opening the TTY device. */ |
14 | if (name != NULL) { |
15 | - if ((sp = strrchr(name, '/')) != (char *)NULL) *sp++ = '\0'; |
16 | - else sp = name; |
17 | - sprintf(path, "/dev/%s", sp); |
18 | - if (tty_lock(sp, 1)) return(-1); /* can we lock the device? */ |
19 | - if ((fd = open(path, O_RDWR)) < 0) { |
20 | + if (name[0] != '/') { |
21 | + if (strlen(name) + 6 > sizeof(pathbuf)) { |
22 | + if (opt_q == 0) fprintf(stderr, |
23 | + _("slattach: tty name too long\n")); |
24 | + return(-1); |
25 | + } |
26 | + sprintf(pathbuf, "/dev/%s", name); |
27 | + path_open = pathbuf; |
28 | + path_lock = name; |
29 | + } else if (!strncmp(name,"/dev/",5)) { |
30 | + path_open = name; |
31 | + path_lock = name+5; |
32 | + } else { |
33 | + path_open = name; |
34 | + path_lock = name; |
35 | + } |
36 | + if (tty_lock(path_lock, 1)) return(-1); /* can we lock the device? */ |
37 | + if ((fd = open(path_open, O_RDWR)) < 0) { |
38 | if (opt_q == 0) fprintf(stderr, |
39 | "slattach: tty_open(%s, RW): %s\n", |
40 | - path, strerror(errno)); |
41 | + path_open, strerror(errno)); |
42 | return(-errno); |
43 | } |
44 | tty_fd = fd; |
45 | - if (opt_d) printf("slattach: tty_open: %s (%d) ", path, fd); |
46 | + if (opt_d) printf("slattach: tty_open: %s (%d) ", path_open, fd); |
47 | } else { |
48 | tty_fd = 0; |
49 | - sp = (char *)NULL; |
50 | } |
51 | |
52 | /* Fetch the current state of the terminal. */ |
53 | @@ -562,20 +574,21 @@ |
54 | int |
55 | main(int argc, char *argv[]) |
56 | { |
57 | - char path[128]; |
58 | + char path_buf[128]; |
59 | + char *path_dev; |
60 | char buff[128]; |
61 | char *speed = NULL; |
62 | char *proto = DEF_PROTO; |
63 | char *extcmd = (char *)0; |
64 | struct hwtype *ht; |
65 | - char *sp; |
66 | int s; |
67 | static struct option longopts[] = { |
68 | { "version", 0, NULL, 'V' }, |
69 | { NULL, 0, NULL, 0 } |
70 | }; |
71 | |
72 | - strcpy(path, ""); |
73 | + strcpy(path_buf, ""); |
74 | + path_dev= path_buf; |
75 | |
76 | /* Scan command line for any arguments. */ |
77 | opterr = 0; |
78 | @@ -649,6 +662,12 @@ |
79 | /*NOTREACHED*/ |
80 | } |
81 | |
82 | + if (setvbuf(stdout,0,_IOLBF,0)) { |
83 | + if (opt_q == 0) fprintf(stderr, _("slattach: setvbuf(stdout,0,_IOLBF,0): %s\n"), |
84 | + strerror(errno)); |
85 | + exit(1); |
86 | + } |
87 | + |
88 | activate_init(); |
89 | |
90 | /* Check the protocol. */ |
91 | @@ -660,15 +679,14 @@ |
92 | |
93 | /* Is a terminal given? */ |
94 | if (optind != (argc - 1)) usage(); |
95 | - safe_strncpy(path, argv[optind], sizeof(path)); |
96 | - if (!strcmp(path, "-")) { |
97 | + safe_strncpy(path_buf, argv[optind], sizeof(path_buf)); |
98 | + if (!strcmp(path_buf, "-")) { |
99 | opt_e = 1; |
100 | - sp = NULL; |
101 | + path_dev = NULL; |
102 | if (tty_open(NULL, speed) < 0) { return(3); } |
103 | } else { |
104 | - if ((sp = strrchr(path, '/')) != NULL) *sp++ = '\0'; |
105 | - else sp = path; |
106 | - if (tty_open(sp, speed) < 0) { return(3); } |
107 | + path_dev = path_buf; |
108 | + if (tty_open(path_dev, speed) < 0) { return(3); } |
109 | } |
110 | |
111 | /* Start the correct protocol. */ |
112 | @@ -681,7 +699,7 @@ |
113 | if (opt_v == 1) { |
114 | tty_get_name(buff); |
115 | printf(_("%s started"), proto); |
116 | - if (sp != NULL) printf(_(" on %s"), sp); |
117 | + if (path_dev != NULL) printf(_(" on %s"), path_dev); |
118 | printf(_(" interface %s\n"), buff); |
119 | } |
120 | |
121 | |