3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# CDDL HEADER START
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# The contents of this file are subject to the terms of the
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# Common Development and Distribution License (the "License").
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# You may not use this file except in compliance with the License.
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# or http://www.opensolaris.org/os/licensing.
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# See the License for the specific language governing permissions
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# and limitations under the License.
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# When distributing Covered Code, include this CDDL HEADER in each
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# If applicable, add the following below this CDDL HEADER, with the
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# fields enclosed by brackets "[]" replaced with your own identifying
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# information: Portions Copyright [yyyy] [name of copyright owner]
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# CDDL HEADER END
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# This test checks whether the AST "join" utility works with
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# multibyte characters as seperator.
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# This was reported as CR #6904878 ("join -t no longer works with multibyte char separator"):
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# ------------ snip ------------
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# join doesn't handle multibyte separator correctly.
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# $ od -tx1 input1
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# 0000000 66 31 a1 f7 66 32 0a
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# $ od -tx1 input2
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# 0000000 74 32 a1 f7 66 31 0a
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# # 0xa1 0xf7 in the file is multibyte character.
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# $ od -tx1 delim
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# 0000000 a1 f7 0a
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# $ /usr/bin/join -j1 1 -j2 2 -o 1.1 -t `cat delim` input1 input2
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# It should output "f1".
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# files are attached.
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# ------------ snip ------------
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# create temporary test directory
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulknertmpdir="$(mktemp -t -d "test_sun_solaris_cr_6904878_join_-t_no_longer_works_with_multibyte_char_separator.XXXXXXXX")" || err_exit "Cannot create temporary directory"
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulknercd "${tmpdir}" || { err_exit "cd ${tmpdir} failed." ; exit $((Errors)) ; }
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner [[ -v LC_ALL ]] && saved_locale.LC_ALL="${LC_ALL}"
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner [[ -v LC_CTYPE ]] && saved_locale.LC_CTYPE="${LC_CTYPE}"
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner [[ -v LANG ]] && saved_locale.LANG="${LANG}"
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner typeset -a join_args_format=( "input1" "input2" )
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner typeset name="ja_JP.eucJP_multibyte_delimiter"
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner typeset input1_format="\x66\x31\xa1\xf7\x66\x32\x0a"
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner typeset input2_format="\x74\x32\xa1\xf7\x66\x31\x0a"
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner typeset -a join_args_format=( "-j1" "1" "-j2" "2" "-o" "1.1" "-t" "\xa1\xf7" "input1" "input2" )
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner if [[ "${tc.locale}" == "<unicode>" ]] ; then
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner # build "join_args" array with multibyte characters in the current locale
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner for arg_index in "${!tc.join_args_format[@]}" ; do
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner join_args+=( "$( printf -- "${tc.join_args_format[arg_index]}" )" )
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner typeset output_format="$( printf -- "${tc.output_format}" )"
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner out="$(${SHELL} -c "${join_cmd} \"\$@\"" dummy "${join_args[@]}" 2>&1)" || err_exit "${testname}: Command returned exit code $?"
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner [[ "${out}" == ${output_format} ]] || err_exit "${testname}: Expected match for $(printf "%q\n" "${output_format}"), got $(printf "%q\n" "${out}")"
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner [[ -v saved_locale.LC_ALL ]] && LC_ALL="${saved_locale.LC_ALL}" || unset LC_ALL
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner [[ -v saved_locale.LC_CTYPE ]] && LC_CTYPE="${saved_locale.LC_CTYPE}" || unset LC_CTYPE
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner [[ -v saved_locale.LANG ]] && LANG="${saved_locale.LANG}" || unset LANG
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner printf "\x66\x31\xa1\xf7\x66\x32\x0a" >"input1"
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner printf "\x74\x32\xa1\xf7\x66\x31\x0a" >"input2"
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner out=$( LC_ALL=ja_JP.eucJP ${SHELL} -o pipefail -o errexit -c '$1 -j1 1 -j2 2 -o 1.1 -t $(cat delim) input1 input2' dummy "${joincmd}" 2>&1 ) || err_exit "${testname}: Test failed with exit code $?"
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner [[ "${out}" == 'f1' ]] || err_exit "${testname}: Expected 'f1', got $(printf "%q\n" "${out}")"
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner#for cmd in "/usr/bin/join" "join" ; do
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulknerrmdir "${tmpdir}" || err_exit "Cannot remove temporary directory ${tmpdir}".