summaryrefslogtreecommitdiff
path: root/www/thttpd/files/patch-mmc.c
blob: bf2c9f6ed641069d8a523193c70e049c39656c06 (plain) (blame)
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
--- mmc.c.orig	Wed May  8 03:35:05 2002
+++ mmc.c	Sun Oct 20 23:56:15 2002
@@ -74,6 +74,9 @@
     time_t ctime;
     int refcount;
     time_t reftime;
+#ifdef USE_SENDFILE
+    int fd;
+#endif
     void* addr;
     unsigned int hash;
     int hash_idx;
@@ -140,7 +143,11 @@
 	/* Yep.  Just return the existing map */
 	++m->refcount;
 	m->reftime = now;
+#ifdef USE_SENDFILE
+	return (&m->fd);
+#else
 	return m->addr;
+#endif
 	}
 
     /* Open the file. */
@@ -186,7 +193,9 @@
     else
 	{
 	size_t size_size = (size_t) m->size;	/* loses on files >2GB */
-#ifdef HAVE_MMAP
+#ifdef USE_SENDFILE
+	m->fd = fd;
+#elif defined(HAVE_MMAP)
 	/* Map the file into memory. */
 	m->addr = mmap( 0, size_size, PROT_READ, MAP_PRIVATE, fd, 0 );
 	if ( m->addr == (void*) -1 && errno == ENOMEM )
@@ -240,8 +249,9 @@
 	    }
 #endif /* HAVE_MMAP */
 	}
+#ifndef USE_SENDFILE
     (void) close( fd );
-
+#endif /* !USE_SENDFILE */
     /* Put the Map into the hash table. */
     if ( add_hash( m ) < 0 )
 	{
@@ -259,8 +269,12 @@
     /* Update the total byte count. */
     mapped_bytes += m->size;
 
+#ifdef USE_SENDFILE
+    return (&m->fd);
+#else
     /* And return the address. */
     return m->addr;
+#endif
     }
 
 
@@ -369,7 +383,9 @@
     m = *mm;
     if ( m->size != 0 )
 	{
-#ifdef HAVE_MMAP
+#ifdef USE_SENDFILE
+	close(m->fd);	    
+#elif defined(HAVE_MMAP)
 	if ( munmap( m->addr, m->size ) < 0 )
 	    syslog( LOG_ERR, "munmap - %m" );
 #else /* HAVE_MMAP */