|
Lines 434-462
mono_dl_build_path (const char *directory, const char *name, void **iter)
Link Here
|
| 434 |
int idx; |
434 |
int idx; |
| 435 |
const char *prefix; |
435 |
const char *prefix; |
| 436 |
const char *suffix; |
436 |
const char *suffix; |
|
|
437 |
gboolean first_call; |
| 437 |
int prlen; |
438 |
int prlen; |
|
|
439 |
int suffixlen; |
| 438 |
char *res; |
440 |
char *res; |
|
|
441 |
|
| 439 |
if (!iter) |
442 |
if (!iter) |
| 440 |
return NULL; |
443 |
return NULL; |
| 441 |
idx = GPOINTER_TO_UINT (*iter); |
444 |
idx = GPOINTER_TO_UINT (*iter); |
| 442 |
if (idx >= G_N_ELEMENTS (suffixes)) |
445 |
if (idx == 0) { |
| 443 |
return NULL; |
446 |
first_call = TRUE; |
|
|
447 |
suffix = ""; |
| 448 |
suffixlen = 0; |
| 449 |
} else { |
| 450 |
idx--; |
| 451 |
if (idx >= G_N_ELEMENTS (suffixes)) |
| 452 |
return NULL; |
| 453 |
first_call = FALSE; |
| 454 |
suffix = suffixes [idx]; |
| 455 |
suffixlen = strlen (suffix); |
| 456 |
} |
| 444 |
|
457 |
|
| 445 |
prlen = strlen (SOPREFIX); |
458 |
prlen = strlen (SOPREFIX); |
| 446 |
if (prlen && strncmp (name, SOPREFIX, prlen) != 0) |
459 |
if (prlen && strncmp (name, SOPREFIX, prlen) != 0) |
| 447 |
prefix = SOPREFIX; |
460 |
prefix = SOPREFIX; |
| 448 |
else |
461 |
else |
| 449 |
prefix = ""; |
462 |
prefix = ""; |
| 450 |
/* if the platform prefix is already provided, we suppose the caller knows the full name already */ |
463 |
|
| 451 |
if (prlen && strncmp (name, SOPREFIX, prlen) == 0) |
464 |
if (first_call || (suffixlen && strstr (name, suffix) == (name + strlen (name) - suffixlen))) |
| 452 |
suffix = ""; |
465 |
suffix = ""; |
| 453 |
else |
466 |
|
| 454 |
suffix = suffixes [idx]; |
|
|
| 455 |
if (directory && *directory) |
467 |
if (directory && *directory) |
| 456 |
res = g_strconcat (directory, G_DIR_SEPARATOR_S, prefix, name, suffix, NULL); |
468 |
res = g_strconcat (directory, G_DIR_SEPARATOR_S, prefix, name, suffix, NULL); |
| 457 |
else |
469 |
else |
| 458 |
res = g_strconcat (prefix, name, suffix, NULL); |
470 |
res = g_strconcat (prefix, name, suffix, NULL); |
| 459 |
++idx; |
471 |
++idx; |
|
|
472 |
if (!first_call) |
| 473 |
idx++; |
| 460 |
*iter = GUINT_TO_POINTER (idx); |
474 |
*iter = GUINT_TO_POINTER (idx); |
| 461 |
return res; |
475 |
return res; |
| 462 |
} |
476 |
} |