Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 11 Jan 1997 19:30:06 -0800 (PST)
From:      David Conran <lucifer@maths.uq.oz.au>
To:        freebsd-bugs
Subject:   Re: bin/2446: Problem in interactive restore.
Message-ID:  <199701120330.TAA28001@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/2446; it has been noted by GNATS.

From: David Conran <lucifer@maths.uq.oz.au>
To: joerg_wunsch@uriah.heep.sax.de
Cc: lucifer@xyzzy.net.au, FreeBSD-gnats-submit@freebsd.org
Subject: Re: bin/2446: Problem in interactive restore.
Date: Sun, 12 Jan 1997 13:24:06 +1000 (EST)

 J Wunsch writes ...
 > 
 > As David Conran wrote:
 > 
 > > orac:/tmp$ restore ivf /dev/nrst1
 > > Verify tape and initialize maps
 > > Tape block size is 32
 > > Dump   date: Mon Jan  6 00:39:10 1997
 > > Dumped from: the epoch
 > > Level 0 dump of /usr on orac.xyzzy.net.au:/dev/sd0e
 > > Label: none
 > > Extract directories from tape
 > > Initialize symbol table.
 > > restore > cd include
 > > canonname: not enough bufferspace
 > 
 > Can you perhaps track this with gdb?  Interactive restore works fine
 > for me (and worked all the time), so i probably have a hard time to
 > reproduce this.
 > 
 > (Hint: send followups to your PR to freebsd-gnats-submit@freebsd.org,
 > using the same subject.)
 
 Well .. I just re-suped and recompiled restore .. and did it off a very
 recent (ie. 3.0-current) dump
 
 I am no gdb expert .. so .. here is my stuff.
 (if there is something else to do .. let me know.)
 Thanks.
 
 
 orac:/tmp$ gdb /home/src/sbin/restore/restore
 GDB is free software and you are welcome to distribute copies of it
  under certain conditions; type "show copying" to see the conditions.
 There is absolutely no warranty for GDB; type "show warranty" for details.
 GDB 4.13 (i386-unknown-freebsd),
 Copyright 1994 Free Software Foundation, Inc...
 (gdb) set args ivf /dev/nrst1
 (gdb) break canon
 Breakpoint 1 at 0x2821: file interactive.c, line 447.
 (gdb) run
 Starting program: /home/src/sbin/restore/restore ivf /dev/nrst1
 Verify tape and initialize maps
 Tape block size is 32
 Dump   date: Sun Jan 12 01:14:28 1997
 Dumped from: the epoch
 Level 0 dump of /usr on orac.xyzzy.net.au:/dev/sd0e
 Label: none
 Extract directories from tape
 Initialize symbol table.
 
 Breakpoint 1, canon (rawname=0x1b00 "/", canonname=0xefbfcd5c "", len=1024)
     at interactive.c:447
 447             if (strcmp(rawname, ".") == 0 || strncmp(rawname, "./", 2) == 0)
 (gdb) step
 449             else if (rawname[0] == '/')
 (gdb) step
 450                     (void) strcpy(canonname, ".");
 (gdb) step
 453             if (strlen(canonname) + strlen(rawname) >= len) {
 (gdb) step
 458             (void) strcat(canonname, rawname);
 (gdb) step
 462             for (cp = np = canonname; *np != '\0'; cp++) {
 (gdb) step
 463                     *cp = *np++;
 (gdb) step
 464                     while (*cp == '/' && *np == '/')
 (gdb) step
 462             for (cp = np = canonname; *np != '\0'; cp++) {
 (gdb) step
 463                     *cp = *np++;
 (gdb) step
 464                     while (*cp == '/' && *np == '/')
 (gdb) step
 462             for (cp = np = canonname; *np != '\0'; cp++) {
 (gdb) step
 467             *cp = '\0';
 (gdb) step
 468             if (*--cp == '/')
 (gdb) step
 469                     *cp = '\0';
 (gdb) step
 473             for (np = canonname; *np != '\0'; ) {
 (gdb) step
 474                     np++;
 (gdb) step
 475                     cp = np;
 (gdb) step
 476                     while (*np != '/' && *np != '\0')
 (gdb) step
 478                     if (np - cp == 1 && *cp == '.') {
 (gdb) step
 483                     if (np - cp == 2 && strncmp(cp, "..", 2) == 0) {
 (gdb) step
 491     }
 (gdb) step
 runcmdshell () at interactive.c:114
 114             if (setjmp(reset) != 0) {
 (gdb) step
 123             runshell = 1;
 (gdb) step
 124             getcmd(curdir, cmd, name, &arglist);
 (gdb) step
 getcmd (curdir=0xefbfcd5c ".", cmd=0xefbfc55c "", name=0xefbfc95c "",
     ap=0xefbfd15c) at interactive.c:315
 315             if (ap->argcnt > 0)
 (gdb) step
 317             if (nextarg != NULL)
 (gdb) step
 323                     fprintf(stderr, "restore > ");
 (gdb) step
 324                     (void) fflush(stderr);
 (gdb) step
 restore > 325                   (void) fgets(input, BUFSIZ, terminal);
 (gdb) step
 cd include
 326             } while (!feof(terminal) && input[0] == '\n');
 (gdb) c
 Continuing.
 
 Breakpoint 1, canon (rawname=0xefbfc13c "./include", canonname=0xefbfc95c "",
     len=4) at interactive.c:447
 447             if (strcmp(rawname, ".") == 0 || strncmp(rawname, "./", 2) == 0)
 (gdb) step
 448                     (void) strcpy(canonname, "");
 (gdb) step
 453             if (strlen(canonname) + strlen(rawname) >= len) {
 (gdb) step
 454                     fprintf(stderr, "canonname: not enough bufferspace\n");
 (gdb) step
 canonname: not enough bufferspace
 455                     done(1);
 (gdb) step
 done (exitcode=1) at dirs.c:765
 765             closemt();
 (gdb) quit
 The program is running.  Quit anyway (and kill it)? (y or n) y
 orac:/tmp$  
 
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199701120330.TAA28001>