1 2 /*--------------------------------------------------------------------*/ 3 /*--- File/socket-related libc stuff. pub_tool_libcfile.h ---*/ 4 /*--------------------------------------------------------------------*/ 5 6 /* 7 This file is part of Valgrind, a dynamic binary instrumentation 8 framework. 9 10 Copyright (C) 2000-2015 Julian Seward 11 jseward@acm.org 12 13 This program is free software; you can redistribute it and/or 14 modify it under the terms of the GNU General Public License as 15 published by the Free Software Foundation; either version 2 of the 16 License, or (at your option) any later version. 17 18 This program is distributed in the hope that it will be useful, but 19 WITHOUT ANY WARRANTY; without even the implied warranty of 20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 21 General Public License for more details. 22 23 You should have received a copy of the GNU General Public License 24 along with this program; if not, write to the Free Software 25 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 26 02111-1307, USA. 27 28 The GNU General Public License is contained in the file COPYING. 29 */ 30 31 #ifndef __PUB_TOOL_LIBCFILE_H 32 #define __PUB_TOOL_LIBCFILE_H 33 34 #include "pub_tool_basics.h" // VG_ macro 35 #include "pub_tool_vki.h" // vki_dirent et al. 36 37 /* --------------------------------------------------------------------- 38 File-related functions. 39 ------------------------------------------------------------------ */ 40 41 /* To use this file you must first include pub_tool_vki.h. */ 42 43 /* Note that VG_(stat) and VG_(fstat) write to a 'struct vg_stat*' and 44 not a 'struct vki_stat*' or a 'struct vki_stat64*'. 'struct 45 vg_stat*' is not the same as either of the vki_ versions. No 46 specific vki_stat{,64} kernel structure will work and is 47 consistently available on different architectures on Linux, so we 48 have to use this 'struct vg_stat' impedance-matching type 49 instead. 50 51 Also note that the fieldnames aren't prefixed with "st_". This is because 52 st_atime et al are macros in sys/stat.h on Darwin, and using those names 53 screws things up. 54 */ 55 struct vg_stat { 56 ULong dev; 57 ULong ino; 58 ULong nlink; 59 UInt mode; 60 UInt uid; 61 UInt gid; 62 ULong rdev; 63 Long size; 64 ULong blksize; 65 ULong blocks; 66 ULong atime; 67 ULong atime_nsec; 68 ULong mtime; 69 ULong mtime_nsec; 70 ULong ctime; 71 ULong ctime_nsec; 72 }; 73 74 extern SysRes VG_(mknod) ( const HChar* pathname, Int mode, UWord dev ); 75 extern SysRes VG_(open) ( const HChar* pathname, Int flags, Int mode ); 76 /* fd_open words like the open(2) system call: 77 returns fd if success, -1 otherwise */ 78 extern Int VG_(fd_open) (const HChar* pathname, Int flags, Int mode); 79 extern void VG_(close) ( Int fd ); 80 extern Int VG_(read) ( Int fd, void* buf, Int count); 81 extern Int VG_(write) ( Int fd, const void* buf, Int count); 82 extern Int VG_(pipe) ( Int fd[2] ); 83 extern Off64T VG_(lseek) ( Int fd, Off64T offset, Int whence ); 84 85 extern SysRes VG_(stat) ( const HChar* file_name, struct vg_stat* buf ); 86 extern Int VG_(fstat) ( Int fd, struct vg_stat* buf ); 87 extern SysRes VG_(dup) ( Int oldfd ); 88 extern SysRes VG_(dup2) ( Int oldfd, Int newfd ); 89 extern Int VG_(rename) ( const HChar* old_name, const HChar* new_name ); 90 extern Int VG_(unlink) ( const HChar* file_name ); 91 92 extern SysRes VG_(poll) (struct vki_pollfd *fds, Int nfds, Int timeout); 93 94 extern SSizeT VG_(readlink)( const HChar* path, HChar* buf, SizeT bufsiz); 95 96 #if defined(VGO_linux) || defined(VGO_solaris) 97 extern Int VG_(getdents64)( Int fd, struct vki_dirent64 *dirp, UInt count ); 98 #endif 99 100 extern const HChar* VG_(basename)( const HChar* path ); 101 extern const HChar* VG_(dirname) ( const HChar* path ); 102 103 /* Return the name of a directory for temporary files. */ 104 extern const HChar* VG_(tmpdir)(void); 105 106 /* Return the working directory at startup. The returned string is 107 persistent. */ 108 extern const HChar *VG_(get_startup_wd) ( void ); 109 110 #endif // __PUB_TOOL_LIBCFILE_H 111 112 /*--------------------------------------------------------------------*/ 113 /*--- end ---*/ 114 /*--------------------------------------------------------------------*/ 115