Re: [PATCH] Include headers for getrlimit() in sha1_file.c
- From
Jonathan Nieder <jrnieder@gmail.com>
- Date
- Mar 18, 2011, 20:23 UTC
- Message-ID
- <20110318202351.GA22696@elie>
- In-Reply-To
- <1300271879-2050-1-git-send-email-stsp@stsp.name>
(+cc: Shawn, Erik) Hi Stefan,
Stefan Sperling wrote:
Show 6 quoted lines
> Fixes compilation error on OpenBSD: > sha1_file.c: In function 'open_packed_git_1': > sha1_file.c:718: error: storage size of 'lim' isn't known > sha1_file.c:721: warning: implicit declaration of function 'getrlimit' > sha1_file.c:721: error: 'RLIMIT_NOFILE' undeclared (first use in this function) > sha1_file.c:718: warning: unused variable 'lim'
Good catch.
Show 9 quoted lines
> --- a/sha1_file.c > +++ b/sha1_file.c > @@ -18,6 +18,10 @@ > #include "pack-revindex.h" > #include "sha1-lookup.h" > > +#include <sys/types.h> > +#include <sys/time.h> > +#include <sys/resource.h>
System headers like this tend to go in git-compat-util.h, so portability fixes having to do with compatibility replacements or order of inclusion only need to happen in one place.
In this case, afaict sys/resource.h is not available on mingw, meaning the #include would probably go in the "#ifndef __MINGW32__" block. Maybe something like this (untested)?
-- 8< -- Subject: compat: add missing #include <sys/resource.h>
Starting with commit c793430 (Limit file descriptors used by packs, 2011-02-28), git uses getrlimit to tell how many file descriptors it can use. Unfortunately it does not include the header declaring that function, resulting in compilation errors on OpenBSD:
sha1_file.c: In function 'open_packed_git_1': sha1_file.c:718: error: storage size of 'lim' isn't known sha1_file.c:721: warning: implicit declaration of function 'getrlimit' sha1_file.c:721: error: 'RLIMIT_NOFILE' undeclared (first use in this function) sha1_file.c:718: warning: unused variable 'lim'
The standard header to include for this is <sys/resource.h> (which on some systems itself requires declarations from <sys/types.h> or <sys/time.h>). Probably the problem was missed until now because in current glibc sys/resource.h happens to be included by sys/wait.h.
MinGW does not provide sys/resource.h (and compat/mingw takes care of providing getrlimit some other way), so add the missing #include to the "#ifndef __MINGW32__" block in git-compat-util.h.
Reported-by: Stefan Sperling <stsp@stsp.name> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> --- git-compat-util.h | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/git-compat-util.h b/git-compat-util.h index 49b50ee..40498b3 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -118,6 +118,7 @@ #endif #ifndef __MINGW32__ #include <sys/wait.h> +#include <sys/resource.h> #include <sys/socket.h> #include <sys/ioctl.h> #include <termios.h>
-- 1.7.4.1