I would probably write this as:

```c
enum { PATH_NE = 0, PATH_EQ = 1, PATH_PREFIX = 2 };

GIT_INLINE(int) path_equal_or_prefixed(const char *parent, const char *child)
{
    const char *p = parent, *c = child;

    while (*p && *c)
        if (*p++ != *c++)
            return PATH_NE;

    if (*p != '\0')
        return PATH_NE; 
    if (*c == '\0')
        return PATH_EQ;
    else if (*c == '/')
        return PATH_PREFIX;
    else
        return PATH_NE;
}
```

and then use it below as:

```c
switch (path_equal_or_prefixed(path, entry->path)) {
case PATH_EQ:     continue;
case PATH_PREFIX: conflict->directoryfile = 1; break;
}
break;
```

I don't know that that's better, but I think it can only return either `path_prefixed` or `path_eq` as true, not both, so there doesn't really seem to have to be multiple return values.