On Tue, Sep 23, 2008 at 01:17:39PM -0700, Shawn O. Pearce wrote: > Dmitry Potapov <dpotapov@xxxxxxxxx> wrote: > > > > static void init_stat(void) > > { > > git_config(git_cygwin_config, NULL); > > cygwin_stat_fn = native_stat ? cygwin_stat : stat; > > cygwin_lstat_fn = native_stat ? cygwin_lstat : lstat; > > if (native_stat < 0 && have_git_dir()) { > native_stat = 0; > git_config(git_cygwin_config, NULL); > cygwin_stat_fn = native_stat ? cygwin_stat : stat; > cygwin_lstat_fn = native_stat ? cygwin_lstat : lstat; > } I am not sure that I understand what you are trying to do here. First, in my implementation, init_stat was supposed to always set cygwin_stat_fn() and cygwin_lstat_fn(), otherwise the code is going to hit the NULL pointer call. Second, the check of native_stat < 0 is absolutely useless, because once we set cygwin_stat_fn and cygwin_lstat_fn, we are never going to call init_stat() again. Did you mean this: if (have_git_dir()) git_config(git_cygwin_config, NULL); else native_stat = 0 cygwin_stat_fn = native_stat ? cygwin_stat : stat; cygwin_lstat_fn = native_stat ? cygwin_lstat : lstat; Or: if (have_git_dir()) { git_config(git_cygwin_config, NULL); cygwin_stat_fn = native_stat ? cygwin_stat : stat; cygwin_lstat_fn = native_stat ? cygwin_lstat : lstat; } and > > static int cygwin_stat_choice(const char *file_name, struct stat *buf) > > { > > init_stat(); > > return (*cygwin_stat_fn)(file_name, buf); change the above line to: return (cygwin_stat_fn ? cygwin_stat_fn : stat) (file_name, buf); so init_stat may be called a few times outside of git directory and then use the default cygwin function, and once we enter to it then load the configuration option and act accordingly. Dmitry -- 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