1 /* 2 * fcntl.h - fcntl interface 3 * 4 * Copyright (c) 2000-2020 Shiro Kawai <shiro@acm.org> 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 17 * 3. Neither the name of the authors nor the names of its contributors 18 * may be used to endorse or promote products derived from this 19 * software without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 24 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 25 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 27 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 28 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 29 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 30 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 31 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 34 #ifndef GAUCHE_FCNTL_H 35 #define GAUCHE_FCNTL_H 36 37 #include <gauche.h> 38 #include <fcntl.h> 39 40 #if defined(EXTFCNTL_EXPORTS) 41 #define LIBGAUCHE_EXT_BODY 42 #endif 43 #include <gauche/extern.h> /* redefine SCM_EXTERN */ 44 45 typedef struct ScmSysFlockRec { 46 SCM_HEADER; 47 struct flock lock; 48 } ScmSysFlock; 49 50 SCM_CLASS_DECL(Scm_SysFlockClass); 51 #define SCM_CLASS_SYS_FLOCK (&Scm_SysFlockClass) 52 #define SCM_SYS_FLOCK(obj) ((ScmSysFlock*)(obj)) 53 #define SCM_SYS_FLOCK_P(obj) (SCM_XTYPEP(obj, SCM_CLASS_SYS_FLOCK)) 54 55 extern ScmObj Scm_MakeSysFlock(void); 56 extern ScmObj Scm_SysFcntl(ScmObj port_or_fd, int op, ScmObj arg); 57 58 #ifdef HAVE_SYS_STATVFS_H 59 #include <sys/statvfs.h> 60 61 typedef struct ScmSysStatvfsRec { 62 SCM_HEADER; 63 struct statvfs vfs; 64 } ScmSysStatvfs; 65 66 SCM_CLASS_DECL(Scm_SysStatvfsClass); 67 #define SCM_CLASS_SYS_STATVFS (&Scm_SysStatvfsClass) 68 #define SCM_SYS_STATVFS(obj) ((ScmSysStatvfs*)(obj)) 69 #define SCM_SYS_STATVFS_P(obj) (SCM_XTYPEP(obj, SCM_CLASS_SYS_STATVFS)) 70 #endif /* HAVE_SYS_STATVFS_H */ 71 72 #endif /* GAUCHE_FCNTL_H */ 73