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 (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved. 24 */ 25 #include <stdlib.h> 26 #include <string.h> 27 #include <stdio.h> 28 #include <sys/types.h> 29 #include <env.h> 30 31 static const char *token = ":"; 32 33 void 34 build_env_list(Elist **list, const char *env) 35 { 36 char *envstr; 37 char *tok; 38 char *lasts; 39 40 if ((envstr = getenv(env)) == NULL) 41 return; 42 envstr = strdup(envstr); 43 tok = strtok_r(envstr, token, &lasts); 44 while (tok) { 45 Elist *lp; 46 if ((lp = (Elist *)malloc(sizeof (Elist))) == NULL) { 47 (void) printf("build_list: malloc failed\n"); 48 exit(1); 49 } 50 lp->l_libname = strdup(tok); 51 lp->l_next = *list; 52 *list = lp; 53 tok = strtok_r(NULL, token, &lasts); 54 } 55 free(envstr); 56 } 57 58 59 Elist * 60 check_list(Elist *list, const char *str) 61 { 62 const char *basestr; 63 64 if (list == NULL) 65 return (NULL); 66 67 /* 68 * Is this a basename or a relative path name 69 */ 70 if ((basestr = strrchr(str, '/')) != NULL) 71 basestr++; 72 else 73 basestr = str; 74 75 76 for (; list; list = list->l_next) { 77 if (strchr(list->l_libname, '/') == NULL) { 78 if (strcmp(basestr, list->l_libname) == 0) 79 return (list); 80 } else { 81 if (strcmp(str, list->l_libname) == 0) 82 return (list); 83 } 84 } 85 return (NULL); 86 } 87 88 char * 89 checkenv(const char *env) 90 { 91 char *envstr; 92 if ((envstr = getenv(env)) == NULL) 93 return (NULL); 94 while (*envstr == ' ') 95 envstr++; 96 if (*envstr == '\0') 97 return (NULL); 98 return (envstr); 99 } 100