Re: [PATCH] add GIT_FAST_STAT mode for Cygwin

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux