View | Details | Raw Unified | Return to bug 588143
Collapse All | Expand All

(-)a/mono/utils/mono-dl.c (-6 / +20 lines)
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
}

Return to bug 588143