1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 22 /* 23 * Copyright 2006 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 #pragma ident "%Z%%M% %I% %E% SMI" 28 29 #pragma D option quiet 30 #pragma D option dynvarsize=2m 31 32 /* 33 * This test verifies that the basename() and dirname() functions are working 34 * properly. Note that the output of this is a ksh script. When run, 35 * it will give no output if the output is correct. 36 */ 37 BEGIN 38 { 39 dir[i++] = "/foo/bar/baz"; 40 dir[i++] = "/foo/bar///baz/"; 41 dir[i++] = "/foo/bar/baz/"; 42 dir[i++] = "/foo/bar/baz//"; 43 dir[i++] = "/foo/bar/baz/."; 44 dir[i++] = "/foo/bar/baz/./"; 45 dir[i++] = "/foo/bar/baz/.//"; 46 dir[i++] = "foo/bar/baz/"; 47 dir[i++] = "/"; 48 dir[i++] = "./"; 49 dir[i++] = "//"; 50 dir[i++] = "/."; 51 dir[i++] = "/./"; 52 dir[i++] = "/./."; 53 dir[i++] = "/.//"; 54 dir[i++] = "."; 55 dir[i++] = "f"; 56 dir[i++] = "f/"; 57 dir[i++] = "/////"; 58 /* 59 * basename(3) and basename(1) return different results for the empty 60 * string on FreeBSD, so we need special handling. 61 dir[i++] = ""; 62 */ 63 64 end = i; 65 i = 0; 66 67 printf("#!/usr/bin/env ksh\n\n"); 68 } 69 70 tick-1ms 71 /i < end/ 72 { 73 printf("if [ `basename \"%s\"` != \"%s\" ]; then\n", 74 dir[i], basename(dir[i])); 75 printf(" echo \"basename(\\\"%s\\\") is \\\"%s\\\"; ", 76 dir[i], basename(dir[i])); 77 printf("expected \\\"`basename \"%s\"`\"\\\"\n", dir[i]); 78 printf("fi\n\n"); 79 printf("if [ `dirname \"%s\"` != \"%s\" ]; then\n", 80 dir[i], dirname(dir[i])); 81 printf(" echo \"dirname(\\\"%s\\\") is \\\"%s\\\"; ", 82 dir[i], dirname(dir[i])); 83 printf("expected \\\"`dirname \"%s\"`\"\\\"\n", dir[i]); 84 printf("fi\n\n"); 85 i++; 86 } 87 88 tick-1ms 89 /i == end/ 90 { 91 dir[i] = ""; 92 printf("if [ \"`basename \"%s\"`\" != \"%s\" -a \".\" != \"%s\" ]; then\n", 93 dir[i], basename(dir[i]), basename(dir[i])); 94 printf(" echo \"basename(\\\"%s\\\") is \\\"%s\\\"; ", 95 dir[i], basename(dir[i])); 96 printf("expected \\\"`basename \"%s\"`\\\" or \\\".\\\"\"\n", dir[i]); 97 printf("fi\n\n"); 98 printf("if [ `dirname \"%s\"` != \"%s\" ]; then\n", 99 dir[i], dirname(dir[i])); 100 printf(" echo \"dirname(\\\"%s\\\") is \\\"%s\\\"; ", 101 dir[i], dirname(dir[i])); 102 printf("expected \\\"`dirname \"%s\"`\"\\\"\n", dir[i]); 103 printf("fi\n\n"); 104 105 exit(0); 106 } 107