/* Failed on powerpc64-linux with a segfault due to ifcvt generating conditional returns without updating dominance info. Extracted from glibc's dl-load.c. */ typedef __SIZE_TYPE__ size_t; static size_t is_dst (const char *start, const char *name, const char *str, int is_path, int secure) { size_t len; _Bool is_curly = 0; if (name[0] == '{') { is_curly = 1; ++name; } len = 0; while (name[len] == str[len] && name[len] != '\0') ++len; if (is_curly) { if (name[len] != '}') return 0; --name; len += 2; } else if (name[len] != '\0' && name[len] != '/' && (!is_path || name[len] != ':')) return 0; if (__builtin_expect (secure, 0) && ((name[len] != '\0' && (!is_path || name[len] != ':')) || (name != start + 1 && (!is_path || name[-2] != ':')))) return 0; return len; }