| OLD | NEW |
| 1 /* Relative (relocatable) prefix support. | 1 /* Relative (relocatable) prefix support. |
| 2 Copyright (C) 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, | 2 Copyright (C) 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, |
| 3 1999, 2000, 2001, 2002, 2006 Free Software Foundation, Inc. | 3 1999, 2000, 2001, 2002, 2006, 2012 Free Software Foundation, Inc. |
| 4 | 4 |
| 5 This file is part of libiberty. | 5 This file is part of libiberty. |
| 6 | 6 |
| 7 GCC is free software; you can redistribute it and/or modify it under | 7 GCC is free software; you can redistribute it and/or modify it under |
| 8 the terms of the GNU General Public License as published by the Free | 8 the terms of the GNU General Public License as published by the Free |
| 9 Software Foundation; either version 2, or (at your option) any later | 9 Software Foundation; either version 2, or (at your option) any later |
| 10 version. | 10 version. |
| 11 | 11 |
| 12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY | 12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY |
| 13 WARRANTY; without even the implied warranty of MERCHANTABILITY or | 13 WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 #ifdef HAVE_CONFIG_H | 51 #ifdef HAVE_CONFIG_H |
| 52 #include "config.h" | 52 #include "config.h" |
| 53 #endif | 53 #endif |
| 54 | 54 |
| 55 #ifdef HAVE_STDLIB_H | 55 #ifdef HAVE_STDLIB_H |
| 56 #include <stdlib.h> | 56 #include <stdlib.h> |
| 57 #endif | 57 #endif |
| 58 #ifdef HAVE_UNISTD_H | 58 #ifdef HAVE_UNISTD_H |
| 59 #include <unistd.h> | 59 #include <unistd.h> |
| 60 #endif | 60 #endif |
| 61 #ifdef HAVE_SYS_STAT_H |
| 62 #include <sys/stat.h> |
| 63 #endif |
| 61 | 64 |
| 62 #include <string.h> | 65 #include <string.h> |
| 63 | 66 |
| 64 #include "ansidecl.h" | 67 #include "ansidecl.h" |
| 65 #include "libiberty.h" | 68 #include "libiberty.h" |
| 66 | 69 |
| 67 #ifndef R_OK | 70 #ifndef R_OK |
| 68 #define R_OK 4 | 71 #define R_OK 4 |
| 69 #define W_OK 2 | 72 #define W_OK 2 |
| 70 #define X_OK 1 | 73 #define X_OK 1 |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 238 of the directories specified in the PATH environment variable. */ | 241 of the directories specified in the PATH environment variable. */ |
| 239 if (lbasename (progname) == progname) | 242 if (lbasename (progname) == progname) |
| 240 { | 243 { |
| 241 char *temp; | 244 char *temp; |
| 242 | 245 |
| 243 temp = getenv ("PATH"); | 246 temp = getenv ("PATH"); |
| 244 if (temp) | 247 if (temp) |
| 245 { | 248 { |
| 246 char *startp, *endp, *nstore; | 249 char *startp, *endp, *nstore; |
| 247 size_t prefixlen = strlen (temp) + 1; | 250 size_t prefixlen = strlen (temp) + 1; |
| 251 size_t len; |
| 248 if (prefixlen < 2) | 252 if (prefixlen < 2) |
| 249 prefixlen = 2; | 253 prefixlen = 2; |
| 250 | 254 |
| 251 » nstore = (char *) alloca (prefixlen + strlen (progname) + 1); | 255 » len = prefixlen + strlen (progname) + 1; |
| 256 #ifdef HAVE_HOST_EXECUTABLE_SUFFIX |
| 257 » len += strlen (HOST_EXECUTABLE_SUFFIX); |
| 258 #endif |
| 259 » nstore = (char *) alloca (len); |
| 252 | 260 |
| 253 startp = endp = temp; | 261 startp = endp = temp; |
| 254 while (1) | 262 while (1) |
| 255 { | 263 { |
| 256 if (*endp == PATH_SEPARATOR || *endp == 0) | 264 if (*endp == PATH_SEPARATOR || *endp == 0) |
| 257 { | 265 { |
| 258 if (endp == startp) | 266 if (endp == startp) |
| 259 { | 267 { |
| 260 nstore[0] = '.'; | 268 nstore[0] = '.'; |
| 261 nstore[1] = DIR_SEPARATOR; | 269 nstore[1] = DIR_SEPARATOR; |
| 262 nstore[2] = '\0'; | 270 nstore[2] = '\0'; |
| 263 } | 271 } |
| 264 else | 272 else |
| 265 { | 273 { |
| 266 » » strncpy (nstore, startp, endp - startp); | 274 » » memcpy (nstore, startp, endp - startp); |
| 267 if (! IS_DIR_SEPARATOR (endp[-1])) | 275 if (! IS_DIR_SEPARATOR (endp[-1])) |
| 268 { | 276 { |
| 269 nstore[endp - startp] = DIR_SEPARATOR; | 277 nstore[endp - startp] = DIR_SEPARATOR; |
| 270 nstore[endp - startp + 1] = 0; | 278 nstore[endp - startp + 1] = 0; |
| 271 } | 279 } |
| 272 else | 280 else |
| 273 nstore[endp - startp] = 0; | 281 nstore[endp - startp] = 0; |
| 274 } | 282 } |
| 275 strcat (nstore, progname); | 283 strcat (nstore, progname); |
| 276 if (! access (nstore, X_OK) | 284 if (! access (nstore, X_OK) |
| 277 #ifdef HAVE_HOST_EXECUTABLE_SUFFIX | 285 #ifdef HAVE_HOST_EXECUTABLE_SUFFIX |
| 278 || ! access (strcat (nstore, HOST_EXECUTABLE_SUFFIX), X_OK
) | 286 || ! access (strcat (nstore, HOST_EXECUTABLE_SUFFIX), X_OK
) |
| 279 #endif | 287 #endif |
| 280 ) | 288 ) |
| 281 { | 289 { |
| 282 » » progname = nstore; | 290 #if defined (HAVE_SYS_STAT_H) && defined (S_ISREG) |
| 283 » » break; | 291 » » struct stat st; |
| 292 » » if (stat (nstore, &st) >= 0 && S_ISREG (st.st_mode)) |
| 293 #endif |
| 294 » » » { |
| 295 » » » progname = nstore; |
| 296 » » » break; |
| 297 » » » } |
| 284 } | 298 } |
| 285 | 299 |
| 286 if (*endp == 0) | 300 if (*endp == 0) |
| 287 break; | 301 break; |
| 288 endp = startp = endp + 1; | 302 endp = startp = endp + 1; |
| 289 } | 303 } |
| 290 else | 304 else |
| 291 endp++; | 305 endp++; |
| 292 } | 306 } |
| 293 } | 307 } |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 404 installation is patched together with soft links. */ | 418 installation is patched together with soft links. */ |
| 405 | 419 |
| 406 char * | 420 char * |
| 407 make_relative_prefix_ignore_links (const char *progname, | 421 make_relative_prefix_ignore_links (const char *progname, |
| 408 const char *bin_prefix, | 422 const char *bin_prefix, |
| 409 const char *prefix) | 423 const char *prefix) |
| 410 { | 424 { |
| 411 return make_relative_prefix_1 (progname, bin_prefix, prefix, 0); | 425 return make_relative_prefix_1 (progname, bin_prefix, prefix, 0); |
| 412 } | 426 } |
| 413 | 427 |
| OLD | NEW |