@@ -359,6 +359,7 @@ static void lsapi_enable_core_dump(void)
359
359
int mib [2 ];
360
360
size_t len ;
361
361
362
+ #if !defined(__OpenBSD__ )
362
363
len = 2 ;
363
364
if ( sysctlnametomib ("kern.sugid_coredump" , mib , & len ) == 0 )
364
365
{
@@ -367,6 +368,15 @@ static void lsapi_enable_core_dump(void)
367
368
perror ( "sysctl: Failed to set 'kern.sugid_coredump', "
368
369
"core dump may not be available!" );
369
370
}
371
+ #else
372
+ int set = 3 ;
373
+ len = sizeof (set );
374
+ mib [0 ] = CTL_KERN ;
375
+ mib [1 ] = KERN_NOSUIDCOREDUMP ;
376
+ if (sysctl (mib , 2 , NULL , 0 , & set , len ) == 0 ) {
377
+ s_enable_core_dump = 1 ;
378
+ }
379
+ #endif
370
380
371
381
372
382
#endif
@@ -1944,7 +1954,7 @@ ssize_t LSAPI_Write_r( LSAPI_Request * pReq, const char * pBuf, size_t len )
1944
1954
}
1945
1955
1946
1956
1947
- #if defined(__FreeBSD__ ) || defined( __NetBSD__ ) || defined( __OpenBSD__ )
1957
+ #if defined(__FreeBSD__ )
1948
1958
ssize_t gsendfile ( int fdOut , int fdIn , off_t * off , size_t size )
1949
1959
{
1950
1960
ssize_t ret ;
@@ -1959,6 +1969,40 @@ ssize_t gsendfile( int fdOut, int fdIn, off_t* off, size_t size )
1959
1969
}
1960
1970
#endif
1961
1971
1972
+ #if defined(__OpenBSD__ ) || defined(__NetBSD__ )
1973
+ ssize_t gsendfile ( int fdOut , int fdIn , off_t * off , size_t size )
1974
+ {
1975
+ ssize_t ret ;
1976
+ off_t written = 0 ;
1977
+ const size_t bufsiz = 16384 ;
1978
+ unsigned char in [bufsiz ] = {0 };
1979
+
1980
+ if (lseek (fdIn , * off , SEEK_SET ) == -1 ) {
1981
+ return -1 ;
1982
+ }
1983
+
1984
+ while (size > 0 ) {
1985
+ size_t tor = size > sizeof (in ) ? sizeof (in ) : size ;
1986
+ ssize_t c = read (fdIn , in , tor );
1987
+ if (c <= 0 ) {
1988
+ goto end ;
1989
+ }
1990
+
1991
+ ssize_t w = write (fdOut , in , c );
1992
+ if (w != c ) {
1993
+ goto end ;
1994
+ }
1995
+
1996
+ written += w ;
1997
+ size -= c ;
1998
+ }
1999
+
2000
+ end :
2001
+ * off += written ;
2002
+ return 0 ;
2003
+ }
2004
+ #endif
2005
+
1962
2006
1963
2007
#if defined(macintosh ) || defined(__APPLE__ ) || defined(__APPLE_CC__ )
1964
2008
ssize_t gsendfile ( int fdOut , int fdIn , off_t * off , size_t size )
0 commit comments