On Wed, Jan 23, 2013 at 5:52 PM, Junio C Hamano <gitster@xxxxxxxxx> wrote: > Lars Hjemli <hjemli@xxxxxxxxx> writes: > >> +static int walk(struct strbuf *path, int argc, const char **argv) >> +{ >> + DIR *dir; >> + struct dirent *ent; >> + struct stat st; >> + size_t len; >> + >> + dir = opendir(path->buf); >> + if (!dir) >> + return errno; >> + strbuf_addstr(path, "/"); >> + len = path->len; >> + while ((ent = readdir(dir))) { >> + if (!strcmp(ent->d_name, ".") || !strcmp(ent->d_name, "..")) >> + continue; >> + if (!strcmp(ent->d_name, ".git")) { >> + strbuf_addstr(path, ent->d_name); >> + setenv(GIT_DIR_ENVIRONMENT, path->buf, 1); >> + strbuf_setlen(path, len - 1); >> + setenv(GIT_WORK_TREE_ENVIRONMENT, path->buf, 1); >> + handle_repo(path->buf, argv); >> + strbuf_addstr(path, "/"); >> + continue; >> + } >> + strbuf_setlen(path, len); >> + strbuf_addstr(path, ent->d_name); >> + switch (DTYPE(ent)) { >> + case DT_UNKNOWN: >> + /* Use stat() instead of lstat(), since we want to >> + * know if we can follow this path into another >> + * directory - it's not important if it's actually >> + * a symlink which gets us there. >> + */ > > This is wrong if you are on a platform that does have d_type, no? > It may say it is a symbolic link, and until you stat you wouldn't > know if it may lead to a directory. You can add "case DT_LNK:" that > behaves the same as DT_UNKNOWN, I think. Yeah, that seems right, thanks. -- larsh -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html