18462SApril.Chin@Sun.COM# 28462SApril.Chin@Sun.COM# CDDL HEADER START 38462SApril.Chin@Sun.COM# 48462SApril.Chin@Sun.COM# The contents of this file are subject to the terms of the 58462SApril.Chin@Sun.COM# Common Development and Distribution License (the "License"). 68462SApril.Chin@Sun.COM# You may not use this file except in compliance with the License. 78462SApril.Chin@Sun.COM# 88462SApril.Chin@Sun.COM# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 98462SApril.Chin@Sun.COM# or http://www.opensolaris.org/os/licensing. 108462SApril.Chin@Sun.COM# See the License for the specific language governing permissions 118462SApril.Chin@Sun.COM# and limitations under the License. 128462SApril.Chin@Sun.COM# 138462SApril.Chin@Sun.COM# When distributing Covered Code, include this CDDL HEADER in each 148462SApril.Chin@Sun.COM# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 158462SApril.Chin@Sun.COM# If applicable, add the following below this CDDL HEADER, with the 168462SApril.Chin@Sun.COM# fields enclosed by brackets "[]" replaced with your own identifying 178462SApril.Chin@Sun.COM# information: Portions Copyright [yyyy] [name of copyright owner] 188462SApril.Chin@Sun.COM# 198462SApril.Chin@Sun.COM# CDDL HEADER END 208462SApril.Chin@Sun.COM# 218462SApril.Chin@Sun.COM 228462SApril.Chin@Sun.COM# 23*12068SRoger.Faulkner@Oracle.COM# Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. 248462SApril.Chin@Sun.COM# 258462SApril.Chin@Sun.COM 268462SApril.Chin@Sun.COM# 278462SApril.Chin@Sun.COM# variable tree test #001 288462SApril.Chin@Sun.COM# Propose of this test is whether ksh93 crashes or not - ast-ksh.2008-05-14 298462SApril.Chin@Sun.COM# crashes like this when running this test: 308462SApril.Chin@Sun.COM# 318462SApril.Chin@Sun.COM# program terminated by signal ILL (illegal opcode) 328462SApril.Chin@Sun.COM# 0xffffffffffffffff: <bad address 0xffffffffffffffff> 338462SApril.Chin@Sun.COM# Current function is nv_diropen 348462SApril.Chin@Sun.COM# 123 dp->hp = (Namval_t*)dtprev(dp->root,&fake); 358462SApril.Chin@Sun.COM# (dbx) where 368462SApril.Chin@Sun.COM# [1] 0x100381e80(0x100381e80, 0xffffffff7fffe690, 0x10, 0x61, 0x0, 0x100381ec9), at 0x100381e80 378462SApril.Chin@Sun.COM# =>[2] nv_diropen(np = (nil), name = 0x100381ebc "mysrcdata"), line 123 in "nvtree.c" 388462SApril.Chin@Sun.COM# [3] walk_tree(np = 0x1003809e0, dlete = 524289), line 743 in "nvtree.c" 398462SApril.Chin@Sun.COM# [4] put_tree(np = 0x1003809e0, val = (nil), flags = 524289, fp = 0x100381db0), line 814 in "nvtree.c" 408462SApril.Chin@Sun.COM# [5] nv_putv(np = 0x1003809e0, value = (nil), flags = 524289, nfp = 0x100381db0), line 141 in "nvdisc.c" 418462SApril.Chin@Sun.COM# [6] _nv_unset(np = 0x1003809e0, flags = 524289), line 1976 in "name.c" 428462SApril.Chin@Sun.COM# [7] table_unset(shp = 0x10033e900, root = 0x100380900, flags = 524289, oroot = 0x100360980), line 1902 in "name.c" 438462SApril.Chin@Sun.COM# [8] sh_unscope(shp = 0x10033e900), line 2711 in "name.c" 448462SApril.Chin@Sun.COM# [9] sh_funscope(argn = 1, argv = 0x10035e680, fun = (nil), arg = 0xffffffff7ffff118, execflg = 4), line 2470 in "xec.c" 458462SApril.Chin@Sun.COM# [10] sh_funct(np = 0x100380860, argn = 1, argv = 0x10035e680, envlist = (nil), execflg = 4), line 2528 in "xec.c" 468462SApril.Chin@Sun.COM# [11] sh_exec(t = 0x10035e620, flags = 4), line 1032 in "xec.c" 478462SApril.Chin@Sun.COM# [12] exfile(shp = 0x10033e900, iop = 0x100379a20, fno = 10), line 589 in "main.c" 488462SApril.Chin@Sun.COM# [13] sh_main(ac = 2, av = 0xffffffff7ffffa08, userinit = (nil)), line 364 in "main.c" 498462SApril.Chin@Sun.COM# [14] main(argc = 2, argv = 0xffffffff7ffffa08), line 46 in "pmain.c" 508462SApril.Chin@Sun.COM# 518462SApril.Chin@Sun.COM 5210898Sroland.mainz@nrubsig.org# test setup 538462SApril.Chin@Sun.COMfunction err_exit 548462SApril.Chin@Sun.COM{ 558462SApril.Chin@Sun.COM print -u2 -n "\t" 568462SApril.Chin@Sun.COM print -u2 -r ${Command}[$1]: "${@:2}" 57*12068SRoger.Faulkner@Oracle.COM (( Errors < 127 && Errors++ )) 588462SApril.Chin@Sun.COM} 598462SApril.Chin@Sun.COMalias err_exit='err_exit $LINENO' 608462SApril.Chin@Sun.COM 6110898Sroland.mainz@nrubsig.org# the test cannot use "nounset" 6210898Sroland.mainz@nrubsig.orgCommand=${0##*/} 638462SApril.Chin@Sun.COMinteger Errors=0 648462SApril.Chin@Sun.COM 658462SApril.Chin@Sun.COM 668462SApril.Chin@Sun.COMfunction build_tree 678462SApril.Chin@Sun.COM{ 688462SApril.Chin@Sun.COM#set -o errexit -o xtrace 698462SApril.Chin@Sun.COM typeset index 708462SApril.Chin@Sun.COM typeset s 718462SApril.Chin@Sun.COM typeset i 728462SApril.Chin@Sun.COM typeset dummy 738462SApril.Chin@Sun.COM typeset a b c d e f 748462SApril.Chin@Sun.COM 758462SApril.Chin@Sun.COM nameref dest_tree="$1" # destination tree 768462SApril.Chin@Sun.COM nameref srcdata="$2" # source data 778462SApril.Chin@Sun.COM typeset tree_mode="$3" # mode to define the type of leads 788462SApril.Chin@Sun.COM 798462SApril.Chin@Sun.COM typeset -A dest_tree.l1 808462SApril.Chin@Sun.COM 818462SApril.Chin@Sun.COM for index in "${!srcdata.hashnodes[@]}" ; do 828462SApril.Chin@Sun.COM nameref node=srcdata.hashnodes["${index}"] 838462SApril.Chin@Sun.COM 848462SApril.Chin@Sun.COM for i in "${node.xlfd[@]}" ; do 858462SApril.Chin@Sun.COM IFS='-' read dummy a b c d e f <<<"$i" 868462SApril.Chin@Sun.COM 878462SApril.Chin@Sun.COM if [[ "$a" == "" ]] ; then 888462SApril.Chin@Sun.COM a="$dummy" 898462SApril.Chin@Sun.COM fi 908462SApril.Chin@Sun.COM 918462SApril.Chin@Sun.COM [[ "$a" == "" ]] && a='-' 928462SApril.Chin@Sun.COM [[ "$b" == "" ]] && b='-' 938462SApril.Chin@Sun.COM [[ "$c" == "" ]] && c='-' 948462SApril.Chin@Sun.COM 958462SApril.Chin@Sun.COM if [[ "${dest_tree.l1["$a"]}" == "" ]] ; then 968462SApril.Chin@Sun.COM #if ! (unset dest_tree.l1["$a"]) ; then 978462SApril.Chin@Sun.COM typeset -A dest_tree.l1["$a"].l2 988462SApril.Chin@Sun.COM fi 998462SApril.Chin@Sun.COM 1008462SApril.Chin@Sun.COM if [[ "${dest_tree.l1["$a"].l2["$b"]}" == "" ]] ; then 1018462SApril.Chin@Sun.COM #if ! (unset dest_tree.l1["$a"].l2["$b"]) ; then 1028462SApril.Chin@Sun.COM typeset -A dest_tree.l1["$a"].l2["$b"].l3 1038462SApril.Chin@Sun.COM fi 1048462SApril.Chin@Sun.COM 1058462SApril.Chin@Sun.COM if [[ "${!dest_tree.l1["$a"].l2["$b"].l3["$c"].entries[*]}" == "" ]] ; then 1068462SApril.Chin@Sun.COM typeset -A dest_tree.l1["$a"].l2["$b"].l3["$c"].entries 1078462SApril.Chin@Sun.COM fi 1088462SApril.Chin@Sun.COM 1098462SApril.Chin@Sun.COM #dest_tree.l1["$a"].l2["$b"].l3["$c"].entries+=( "$index" ) 1108462SApril.Chin@Sun.COM typeset new_index 1118462SApril.Chin@Sun.COM if [[ "${tree_mode}" == "leaf_name" ]] ; then 1128462SApril.Chin@Sun.COM new_index=$(( ${#dest_tree.l1["$a"].l2["$b"].l3["$c"].entries[@]}+1 )) 1138462SApril.Chin@Sun.COM else 1148462SApril.Chin@Sun.COM new_index="${node.name}" 1158462SApril.Chin@Sun.COM 1168462SApril.Chin@Sun.COM # skip if the leaf node already exists 1178462SApril.Chin@Sun.COM if [[ "${dest_tree.l1["$a"].l2["$b"].l3["$c"].entries[${new_index}]}" != "" ]] ; then 1188462SApril.Chin@Sun.COM continue 1198462SApril.Chin@Sun.COM fi 1208462SApril.Chin@Sun.COM fi 1218462SApril.Chin@Sun.COM 1228462SApril.Chin@Sun.COM add_tree_leaf dest_tree.l1["$a"].l2["$b"].l3["$c"].entries[${new_index}] "${index}" "${tree_mode}" 1238462SApril.Chin@Sun.COM done 1248462SApril.Chin@Sun.COM done 1258462SApril.Chin@Sun.COM 1268462SApril.Chin@Sun.COM return 0 1278462SApril.Chin@Sun.COM} 1288462SApril.Chin@Sun.COM 1298462SApril.Chin@Sun.COMfunction add_tree_leaf 1308462SApril.Chin@Sun.COM{ 1318462SApril.Chin@Sun.COM nameref tree_leafnode="$1" 1328462SApril.Chin@Sun.COM nameref data_node=srcdata.hashnodes["$2"] 1338462SApril.Chin@Sun.COM typeset add_mode="$3" 1348462SApril.Chin@Sun.COM 1358462SApril.Chin@Sun.COM case "${add_mode}" in 1368462SApril.Chin@Sun.COM "leaf_name") 1378462SApril.Chin@Sun.COM tree_leafnode="${data_node.name}" 1388462SApril.Chin@Sun.COM return 0 1398462SApril.Chin@Sun.COM ;; 1408462SApril.Chin@Sun.COM "leaf_compound") 1418462SApril.Chin@Sun.COM tree_leafnode=( 1428462SApril.Chin@Sun.COM typeset name="${data_node.name}" 1438462SApril.Chin@Sun.COM typeset -a filenames=( "${data_node.filenames[@]}" ) 1448462SApril.Chin@Sun.COM typeset -a comments=( "${data_node.comments[@]}" ) 1458462SApril.Chin@Sun.COM typeset -a xlfd=( "${data_node.xlfd[@]}" ) 1468462SApril.Chin@Sun.COM ) 1478462SApril.Chin@Sun.COM return 0 1488462SApril.Chin@Sun.COM ;; 1498462SApril.Chin@Sun.COM *) 1508462SApril.Chin@Sun.COM print -u2 -f "ERROR: Unknown mode %s in add_tree_leaf\n" "${add_mode}" 1518462SApril.Chin@Sun.COM return 1 1528462SApril.Chin@Sun.COM ;; 1538462SApril.Chin@Sun.COM esac 1548462SApril.Chin@Sun.COM 1558462SApril.Chin@Sun.COM # not reached 1568462SApril.Chin@Sun.COM return 1 1578462SApril.Chin@Sun.COM} 1588462SApril.Chin@Sun.COM 1598462SApril.Chin@Sun.COMfunction main 1608462SApril.Chin@Sun.COM{ 1618462SApril.Chin@Sun.COM typeset mysrcdata=( 1628462SApril.Chin@Sun.COM typeset -A hashnodes=( 1638462SApril.Chin@Sun.COM [abcd]=( 1648462SApril.Chin@Sun.COM name='abcd' 1658462SApril.Chin@Sun.COM typeset -a xlfd=( 1668462SApril.Chin@Sun.COM '-urw-itc zapfchancery-medium-i-normal--0-0-0-0-p-0-iso8859-1' 1678462SApril.Chin@Sun.COM '-urw-itc zapfdingbats-medium-r-normal--0-0-0-0-p-0-adobe-fontspecific' 1688462SApril.Chin@Sun.COM '-urw-itc zapfdingbats-medium-r-normal--0-0-0-0-p-0-sun-fontspecific' 1698462SApril.Chin@Sun.COM ) 1708462SApril.Chin@Sun.COM typeset -a comments=( 1718462SApril.Chin@Sun.COM 'comment 1' 1728462SApril.Chin@Sun.COM 'comment 2' 1738462SApril.Chin@Sun.COM 'comment 3' 1748462SApril.Chin@Sun.COM ) 1758462SApril.Chin@Sun.COM typeset -a filenames=( 1768462SApril.Chin@Sun.COM '/home/foo/abcd_1' 1778462SApril.Chin@Sun.COM '/home/foo/abcd_2' 1788462SApril.Chin@Sun.COM '/home/foo/abcd_3' 1798462SApril.Chin@Sun.COM ) 1808462SApril.Chin@Sun.COM ) 1818462SApril.Chin@Sun.COM ) 1828462SApril.Chin@Sun.COM ) 1838462SApril.Chin@Sun.COM 1848462SApril.Chin@Sun.COM mytree=() 1858462SApril.Chin@Sun.COM build_tree mytree mysrcdata leaf_compound 1868462SApril.Chin@Sun.COM# (( $(print -r -- "$mytree" | wc -l) > 10 )) || err_exit "Compound tree too small." 1878462SApril.Chin@Sun.COM} 1888462SApril.Chin@Sun.COM 1898462SApril.Chin@Sun.COMmain 1908462SApril.Chin@Sun.COM 1918462SApril.Chin@Sun.COM# tests done 1928462SApril.Chin@Sun.COMexit $((Errors)) 193