mirror of
https://git.freebsd.org/ports.git
synced 2025-06-22 05:00:30 -04:00
70 lines
1.4 KiB
C
70 lines
1.4 KiB
C
--- 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 */
|