git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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
Previous: Stefan SperlingNext: Arnaud Lacombe
Message 2 of 7 in “Include headers for getrlimit() in sha1_file.c”
  1. Include headers for getrlimit() in sha1_file.cStefan Sperling, Mar 16, 2011
  2. Jonathan NiederMar 18, 2011
  3. Arnaud LacombeMar 19, 2011
  4. Stefan SperlingMar 19, 2011
  5. compat: add missing #include <sys/resource.h>Jonathan Nieder, Mar 31, 2011
  6. Jonathan NiederApr 3, 2011
  7. Junio C HamanoApr 3, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.