github.com/llvm-mirror/llgo@v0.0.0-20190322182713-bf6f0a60fce1/third_party/gofrontend/libgo/runtime/go-varargs.c (about) 1 /* go-varargs.c -- functions for calling C varargs functions. 2 3 Copyright 2013 The Go Authors. All rights reserved. 4 Use of this source code is governed by a BSD-style 5 license that can be found in the LICENSE file. */ 6 7 #include "config.h" 8 9 #include <errno.h> 10 #include <stdint.h> 11 #include <unistd.h> 12 #include <sys/types.h> 13 #include <fcntl.h> 14 #include <sys/ioctl.h> 15 16 /* The syscall package calls C functions. The Go compiler can not 17 represent a C varargs functions. On some systems it's important 18 that the declaration of a function match the call. This function 19 holds non-varargs C functions that the Go code can call. */ 20 21 int 22 __go_open (char *path, int mode, mode_t perm) 23 { 24 return open (path, mode, perm); 25 } 26 27 int 28 __go_fcntl (int fd, int cmd, int arg) 29 { 30 return fcntl (fd, cmd, arg); 31 } 32 33 int 34 __go_fcntl_flock (int fd, int cmd, struct flock *arg) 35 { 36 return fcntl (fd, cmd, arg); 37 } 38 39 // This is for the net package. We use uintptr_t to make sure that 40 // the types match, since the Go and C "int" types are not the same. 41 struct go_fcntl_ret { 42 uintptr_t r; 43 uintptr_t err; 44 }; 45 46 struct go_fcntl_ret 47 __go_fcntl_uintptr (uintptr_t fd, uintptr_t cmd, uintptr_t arg) 48 { 49 int r; 50 struct go_fcntl_ret ret; 51 52 r = fcntl ((int) fd, (int) cmd, (int) arg); 53 ret.r = (uintptr_t) r; 54 if (r < 0) 55 ret.err = (uintptr_t) errno; 56 else 57 ret.err = 0; 58 return ret; 59 } 60 61 int 62 __go_ioctl (int d, int request, int arg) 63 { 64 return ioctl (d, request, arg); 65 } 66 67 int 68 __go_ioctl_ptr (int d, int request, void *arg) 69 { 70 return ioctl (d, request, arg); 71 } 72 73 #ifdef HAVE_OPEN64 74 75 int 76 __go_open64 (char *path, int mode, mode_t perm) 77 { 78 return open64 (path, mode, perm); 79 } 80 81 #endif 82 83 #ifdef HAVE_OPENAT 84 85 int 86 __go_openat (int fd, char *path, int flags, mode_t mode) 87 { 88 return openat (fd, path, flags, mode); 89 } 90 91 #endif