[prev in list] [next in list] [prev in thread] [next in thread]
List: git
Subject: Re: [PATCH] add GIT_FAST_STAT mode for Cygwin
From: Dmitry Potapov <dpotapov () gmail ! com>
Date: 2008-09-23 21:28:58
Message-ID: 20080923212858.GU21650 () dpotapov ! dyndns ! org
[Download RAW message or body]
On Tue, Sep 23, 2008 at 01:17:39PM -0700, Shawn O. Pearce wrote:
> Dmitry Potapov <dpotapov@gmail.com> 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@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic