+--- net-tools/slattach.c~ Sun Sep 19 19:04:28 1999
++++ net-tools/slattach.c Sun Sep 19 19:35:56 1999
+@@ -451,27 +451,39 @@
+ static int
+ tty_open(char *name, char *speed)
+ {
+- char path[PATH_MAX];
+- register char *sp;
++ char pathbuf[PATH_MAX];
++ register char *path_open, *path_lock;
+ int fd;
+
+ /* Try opening the TTY device. */
+ if (name != NULL) {
+- if ((sp = strrchr(name, '/')) != (char *)NULL) *sp++ = '\0';
+- else sp = name;
+- sprintf(path, "/dev/%s", sp);
+- if (tty_lock(sp, 1)) return(-1); /* can we lock the device? */
+- if ((fd = open(path, O_RDWR)) < 0) {
++ if (name[0] != '/') {
++ if (strlen(name) + 6 > sizeof(pathbuf)) {
++ if (opt_q == 0) fprintf(stderr,
++ _("slattach: tty name too long\n"));
++ return(-1);
++ }
++ sprintf(pathbuf, "/dev/%s", name);
++ path_open = pathbuf;
++ path_lock = name;
++ } else if (!strncmp(name,"/dev/",5)) {
++ path_open = name;
++ path_lock = name+5;
++ } else {
++ path_open = name;
++ path_lock = name;
++ }
++ if (tty_lock(path_lock, 1)) return(-1); /* can we lock the device? */
++ if ((fd = open(path_open, O_RDWR)) < 0) {
+ if (opt_q == 0) fprintf(stderr,
+ "slattach: tty_open(%s, RW): %s\n",
+- path, strerror(errno));
++ path_open, strerror(errno));
+ return(-errno);
+ }
+ tty_fd = fd;
+- if (opt_d) printf("slattach: tty_open: %s (%d) ", path, fd);
++ if (opt_d) printf("slattach: tty_open: %s (%d) ", path_open, fd);
+ } else {
+ tty_fd = 0;
+- sp = (char *)NULL;
+ }
+
+ /* Fetch the current state of the terminal. */
+@@ -562,20 +574,21 @@
+ int
+ main(int argc, char *argv[])
+ {
+- char path[128];
++ char path_buf[128];
++ char *path_dev;
+ char buff[128];
+ char *speed = NULL;
+ char *proto = DEF_PROTO;
+ char *extcmd = (char *)0;
+ struct hwtype *ht;
+- char *sp;
+ int s;
+ static struct option longopts[] = {
+ { "version", 0, NULL, 'V' },
+ { NULL, 0, NULL, 0 }
+ };
+
+- strcpy(path, "");
++ strcpy(path_buf, "");
++ path_dev= path_buf;
+
+ /* Scan command line for any arguments. */
+ opterr = 0;
+@@ -649,6 +662,12 @@
+ /*NOTREACHED*/
+ }
+
++ if (setvbuf(stdout,0,_IOLBF,0)) {
++ if (opt_q == 0) fprintf(stderr, _("slattach: setvbuf(stdout,0,_IOLBF,0): %s\n"),
++ strerror(errno));
++ exit(1);
++ }
++
+ activate_init();
+
+ /* Check the protocol. */
+@@ -660,15 +679,14 @@
+
+ /* Is a terminal given? */
+ if (optind != (argc - 1)) usage();
+- safe_strncpy(path, argv[optind], sizeof(path));
+- if (!strcmp(path, "-")) {
++ safe_strncpy(path_buf, argv[optind], sizeof(path_buf));
++ if (!strcmp(path_buf, "-")) {
+ opt_e = 1;
+- sp = NULL;
++ path_dev = NULL;
+ if (tty_open(NULL, speed) < 0) { return(3); }
+ } else {
+- if ((sp = strrchr(path, '/')) != NULL) *sp++ = '\0';
+- else sp = path;
+- if (tty_open(sp, speed) < 0) { return(3); }
++ path_dev = path_buf;
++ if (tty_open(path_dev, speed) < 0) { return(3); }
+ }
+
+ /* Start the correct protocol. */
+@@ -681,7 +699,7 @@
+ if (opt_v == 1) {
+ tty_get_name(buff);
+ printf(_("%s started"), proto);
+- if (sp != NULL) printf(_(" on %s"), sp);
++ if (path_dev != NULL) printf(_(" on %s"), path_dev);
+ printf(_(" interface %s\n"), buff);
+ }
+
+