On Wed, Nov 21, 2007 at 10:20:39PM +1300, Richard Toohey wrote:
> On 21/11/2007, at 12:08 PM, Jeff Ross wrote:
>
>> Jeff Ross wrote:
>>> Hi,
>>>
>>> "
>>> 11609 restore RET write 27/0x1b
>>> 11609 restore CALL write(0x2,0x80147000,0x34)
>>> 11609 restore GIO fd 2 wrote 52 bytes
>>> "1834488 Document Scrap '\M-o\M^C\M^X Journal Entrie...'.shs
>>> "
>>> On a console (not xterm) the file name appears to be
>>> Document Scrap 'C/ Journal Entrie...'.shs
>>> (that's a lower case "i" with two dots over it.)
>>
>> My original e-mail did get mangled a little.
>>
>> The C/ above is really the lowercase i with two dots over it.
>>
>> Jeff
>
> I had a look out of curiosity (again) ... no great words of wisdom but
> might help ...
>
> Doesn't *just* seem to be because of the i-with-two-dots above it (0xEF? I
> looked at http://unicode.org/charts/ and the Latin-1 page - you'll need a
> PDF viewer. The character is a LATIN SMALL LETTER I WITH DIAERESIS to give
> it the proper moniker ...)
>
> Create char_file.c (yes, no prizes for this code.) You can achieve getting
> this filename without code, but might be easier to use the code than find
> the right character and paste it.
>
> #include <stdio.h>
>
> int main(void) {
> FILE *f;
> char fn[]="xxxxx.txt";
> fn[2]=0xEF;
> f=fopen(fn,"w");
> fputs("Something here",f);
> fclose(f);
> return 0;
> }
>
> Compile with ...
> # cc -Wall -o char_file char_file.c
>
> Execute with ...
> # ./char_file
>
> You should end up with a new file in your current directory:
>
> xx?xx.txt (depending on your display, that question mark may
> appear as the
> i-with-two-dots.)
>
> Do a dump:
>
> # mkdir testd
> # mv xx?xx.txt testd
> # dump -0 -f testd.dmp testd/
> DUMP: Dumping sub files/directories from /home
> DUMP: Dumping file/directory testd/
> DUMP: Date of this level 0 dump: Thu Nov 22 10:59:25 2007
> DUMP: Date of last level 0 dump: the epoch
> DUMP: Dumping /dev/rwd0h (/home) to testd.dmp
> DUMP: mapping (Pass I) [regular files]
> DUMP: mapping (Pass II) [directories]
> DUMP: estimated 106 tape blocks on 0.00 tape(s).
> DUMP: Volume 1 started at: Thu Nov 22 10:59:25 2007
> DUMP: dumping (Pass III) [directories]
> DUMP: dumping (Pass IV) [regular files]
> DUMP: 74 tape blocks on 1 volume
> DUMP: Date of this level 0 dump: Thu Nov 22 10:59:25 2007
> DUMP: Volume 1 completed at: Thu Nov 22 10:59:25 2007
> DUMP: Date this dump completed: Thu Nov 22 10:59:25 2007
> DUMP: Average transfer rate: 0 KB/s
> DUMP: Closing testd.dmp
> DUMP: DUMP IS DONE
>
> Do a restore:
>
> # restore -i -f testd.dmp
> restore > cd testd
> restore > verbose
> verbose mode on
> restore > ls
> ./testd:
> 25 ./ 2 ../ 24 xx?xx.txt
>
> restore > quit
>
> The copy/paste was via a Mac console - on X running on OpenBSD 4.2/i386 the
> i-with-two-dots appears correctly throughout.
>
> I *know* your dump/restore process is a LOT more complicated than this -
> I'm trying to reproduce the error with the smallest amount of effort (don't
> fancy setting up a Windows box and compressing 12Gb, etc.!)
>
> Guess the next thing might be getting a way smaller sample dump file that
> still shows the problem? Doesn't *seem* to be just the i character - so is
> it the spaces? The apostrophes? Combination of all three? The length of
> the filename? The Windows factor? Samba? Translation by something?
>
> The (interactive) restore source code is in
> /usr/src/sbin/restore/interactive.c - so you could try adding some debug
> messages in there on a test box and run the file through it ...
>
> Are you running 4.2 i386 (apologies if covered or obvious in your posting?)
>
> Thanks.
The easiest way to reproduce I found so far is:
echo '\M-o\M^C\M^X' | unvis
It hangs my xterm. It does not hang a console.
I think dump should 'vis' the filenames it prints.
-Otto