search-path.c (1789B)
1 /* -*-comment-start: "//";comment-end:""-*- 2 * GNU Mes --- Maxwell Equations of Software 3 * Copyright © 2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> 4 * 5 * This file is part of GNU Mes. 6 * 7 * GNU Mes is free software; you can redistribute it and/or modify it 8 * under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 3 of the License, or (at 10 * your option) any later version. 11 * 12 * GNU Mes is distributed in the hope that it will be useful, but 13 * WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with GNU Mes. If not, see <http://www.gnu.org/licenses/>. 19 */ 20 21 #include <mes/lib.h> 22 #include <string.h> 23 #include <stdlib.h> 24 #include <unistd.h> 25 26 char * 27 search_path (char const *file_name) 28 { 29 static char buf[256]; 30 char *path = getenv ("PATH"); 31 if (__mes_debug ()) 32 { 33 eputs ("\n search-path: "); 34 eputs (file_name); 35 eputs ("\n"); 36 } 37 while (*path) 38 { 39 char *end = strchr (path, ':'); 40 if (!end) 41 end = strchr (path, '\0'); 42 strncpy (buf, path, end - path); 43 buf[end - path] = 0; 44 if (__mes_debug ()) 45 { 46 eputs (" dir: "); 47 eputs (buf); 48 eputs ("\n"); 49 } 50 if (buf[end - path] != '/') 51 strcat (buf, "/"); 52 strcat (buf, file_name); 53 if (!access (buf, X_OK)) 54 { 55 if (__mes_debug ()) 56 { 57 eputs (" found: "); 58 eputs (buf); 59 eputs ("\n"); 60 } 61 return buf; 62 } 63 path = end + 1; 64 } 65 return 0; 66 }