On Tue, 23 Sep 2014 09:23:54 -0500, Bill Godfrey wrote:
>>
>I have seen the very misleading 451 message when attempting this with a USS 
>file in which the last line does not end with hex 15.
>
I tried the following script (on Solaris):

550$ cat bin/longline
#! /bin/sh -x
# Doc: create a large file consisting of only a single line.

target=$HOME/work/bigline

# On ASCII system, "\n" is '\012'
: &&amp; { tr -d '\012' </dev/random |
    ssh $MVS_USER@$MVS_HOST "set -x
        { dd bs=1000 count=1000; echo; } |
            tee $target | wc"; }

cd $TMPDIR
ftp $MVS_HOST <<eod
    verbose
    ascii
    cd $HOME/work

    get bigline long1

    site encoding=mbcs
    site mbdataconn=(IBM-1047,UTF-8)
    get $target long2

    quit
eod

... with the results:
    ...
+ dd bs=1000 count=1000 
+ wc 
FSUM6384 844+156 records in
844+156 records out
+ echo 
      1   17014  863161 

... Why not 1000001?  That's for MVS-OE.

    ...
Verbose mode on.
200 Representation type is Ascii NonPrint
250 HFS directory .../work is the current working directory

200 Port request OK.
125 Sending data set .../work/bigline
250 Transfer completed successfully.
local: long1 remote: bigline
862162 bytes received in 0.037 seconds (22973.67 Kbytes/s)

200 SITE command was accepted
200 SITE command was accepted
200 Port request OK.
125 Sending data set .../work/bigline
451 File transfer failed. Multi-byte data conversion error occurred

221 Quit command received. Goodbye. 

There's *no* character that can't be converted from IBM-1047 to UTF-8.
I suspect that when doing a MBCS conversion, FTP attempts to break the
input data into lines and convert them one at a time.  Perhaps it is done
this way from concern that a buffer might otherwise contain an incomplete
character.  In:

    
http://pic.dhe.ibm.com/infocenter/zos/v2r1/topic/com.ibm.zos.v2r1.bpxbd00/iconvp.htm
 
    iconv() — Code conversion
    z/OS XL C/C++ Runtime Library Reference
    SC14-7314-00
        ...
    If the input buffer ends with an incomplete character or shift sequence, 
conversion stops
    after the previous successfully converted bytes, and iconv() sets errno to 
EINVAL.

There's a straightforward technique to recover from this that does not require 
breaking
the input data into lines nor a priori knowedge of where the data may be 
separated
into characters.

They could have done better.

-- gil

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to