On Fri, 08 Feb 2008 20:32:47 -0600, Brandon Casey <casey@xxxxxxxxxxxxxxx> wrote: > Some systems do not fail as expected when fread et al. are called on > a directory stream. Replace fopen on such systems which will fail > when the supplied path is a directory. I applied this patch instead of mine, and added the Makefile define Harder to trace, as it is not issuing error messages, but could this success^Wfailure be related? /pro/3gl/LINUX/git-1.5.4.rc5 103 > cat t/t5701-clone-local.sh.err * ok 1: preparing origin repository * ok 2: local clone without .git suffix * ok 3: local clone with .git suffix * ok 4: local clone from x * FAIL 5: local clone from x.git that does not exist cd "$D" && if git clone -l -s x.git z then echo "Oops, should have failed" false else echo happy fi * ok 6: With -no-hardlinks, local will make a copy * ok 7: Even without -l, local will make a hardlink * failed 1 among 7 test(s) Any hints in where to start digging? > Signed-off-by: Brandon Casey <casey@xxxxxxxxxxxxxxx> > --- > Makefile | 7 +++++++ > compat/fopen.c | 26 ++++++++++++++++++++++++++ > git-compat-util.h | 5 +++++ > 3 files changed, 38 insertions(+), 0 deletions(-) > create mode 100644 compat/fopen.c > > diff --git a/Makefile b/Makefile > index 92341c4..debfc23 100644 > --- a/Makefile > +++ b/Makefile > @@ -3,6 +3,9 @@ all:: > > # Define V=1 to have a more verbose compile. > # > +# Define FREAD_READS_DIRECTORIES if your are on a system which succeeds > +# when attempting to read from an fopen'ed directory. > +# > # Define NO_OPENSSL environment variable if you do not have OpenSSL. > # This also implies MOZILLA_SHA1. > # > @@ -618,6 +621,10 @@ endif > ifdef NO_C99_FORMAT > BASIC_CFLAGS += -DNO_C99_FORMAT > endif > +ifdef FREAD_READS_DIRECTORIES > + COMPAT_CFLAGS += -DFREAD_READS_DIRECTORIES > + COMPAT_OBJS += compat/fopen.o > +endif > ifdef NO_SYMLINK_HEAD > BASIC_CFLAGS += -DNO_SYMLINK_HEAD > endif > diff --git a/compat/fopen.c b/compat/fopen.c > new file mode 100644 > index 0000000..ccb9e89 > --- /dev/null > +++ b/compat/fopen.c > @@ -0,0 +1,26 @@ > +#include "../git-compat-util.h" > +#undef fopen > +FILE *git_fopen(const char *path, const char *mode) > +{ > + FILE *fp; > + struct stat st; > + > + if (mode[0] == 'w' || mode[0] == 'a') > + return fopen(path, mode); > + > + if (!(fp = fopen(path, mode))) > + return NULL; > + > + if (fstat(fileno(fp), &st)) { > + fclose(fp); > + return NULL; > + } > + > + if (S_ISDIR(st.st_mode)) { > + fclose(fp); > + errno = EISDIR; > + return NULL; > + } > + > + return fp; > +} > diff --git a/git-compat-util.h b/git-compat-util.h > index 4df90cb..46d5e93 100644 > --- a/git-compat-util.h > +++ b/git-compat-util.h > @@ -204,6 +204,11 @@ void *gitmemmem(const void *haystack, size_t haystacklen, > const void *needle, size_t needlelen); > #endif > > +#ifdef FREAD_READS_DIRECTORIES > +#define fopen(a,b) git_fopen(a,b) > +extern FILE *git_fopen(const char*, const char*); > +#endif > + > #ifdef __GLIBC_PREREQ > #if __GLIBC_PREREQ(2, 1) > #define HAVE_STRCHRNUL -- H.Merijn Brand Amsterdam Perl Mongers (http://amsterdam.pm.org/) using & porting perl 5.6.2, 5.8.x, 5.10.x on HP-UX 10.20, 11.00, 11.11, & 11.23, SuSE 10.1 & 10.2, AIX 5.2, and Cygwin. http://qa.perl.org http://mirrors.develooper.com/hpux/ http://www.test-smoke.org http://www.goldmark.org/jeff/stupid-disclaimers/ - 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