summaryrefslogtreecommitdiffstats
path: root/main/dconf/0001-Avoid-posix_fallocate-so-it-works-on-uClibc.patch
blob: 5317b39c96976e045167074700863876f9ad737e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
From e6d875ff19ba7f23e68a2131d9abe2de3f39d001 Mon Sep 17 00:00:00 2001
From: Natanael Copa <ncopa@alpinelinux.org>
Date: Sat, 9 Oct 2010 20:34:08 +0000
Subject: [PATCH] Avoid posix_fallocate() so it works on uClibc

It seems like the possix_fallocate() does not need to be provided on
all implementations (see "Application Usage" in
http://www.opengroup.org/onlinepubs/009695399/functions/posix_fallocate.html )

I'm not too familiar with the code but it looks like _DConfEngine->shm
is a mmap to a file with 1 char size. If thats the case then something
like this would work:
---
 engine/dconf-engine.c |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/engine/dconf-engine.c b/engine/dconf-engine.c
index cf57431..8eb3fa7 100644
--- a/engine/dconf-engine.c
+++ b/engine/dconf-engine.c
@@ -144,7 +144,11 @@ dconf_engine_setup_user (DConfEngine *engine)
 
           if (fd >= 0)
             {
-              if (posix_fallocate (fd, 0, 1) == 0)
+	      struct stat st;
+	      int r = fstat(fd, &st);
+	      if (r == 0 && st.st_size == 0)
+	      	r = write(fd, "", 1);
+              if (r == 0)
                 {
                   engine->shm = mmap (NULL, 1, PROT_READ, MAP_SHARED, fd, 0);
 
-- 
1.7.3.1