arm64 insn selector: improved handling of Or1/And1 trees.
[valgrind.git] / include / pub_tool_libcfile.h
blobc42f1b8d4dd9f8cbf43fdea537dfb65e71d1b4fe
2 /*--------------------------------------------------------------------*/
3 /*--- File/socket-related libc stuff. pub_tool_libcfile.h ---*/
4 /*--------------------------------------------------------------------*/
6 /*
7 This file is part of Valgrind, a dynamic binary instrumentation
8 framework.
10 Copyright (C) 2000-2017 Julian Seward
11 jseward@acm.org
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.
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.
23 You should have received a copy of the GNU General Public License
24 along with this program; if not, see <http://www.gnu.org/licenses/>.
26 The GNU General Public License is contained in the file COPYING.
29 #ifndef __PUB_TOOL_LIBCFILE_H
30 #define __PUB_TOOL_LIBCFILE_H
32 #include "pub_tool_basics.h" // VG_ macro
33 #include "pub_tool_vki.h" // vki_dirent et al.
35 /* ---------------------------------------------------------------------
36 File-related functions.
37 ------------------------------------------------------------------ */
39 /* To use this file you must first include pub_tool_vki.h. */
41 /* Note that VG_(stat) and VG_(fstat) write to a 'struct vg_stat*' and
42 not a 'struct vki_stat*' or a 'struct vki_stat64*'. 'struct
43 vg_stat*' is not the same as either of the vki_ versions. No
44 specific vki_stat{,64} kernel structure will work and is
45 consistently available on different architectures on Linux, so we
46 have to use this 'struct vg_stat' impedance-matching type
47 instead.
49 Also note that the fieldnames aren't prefixed with "st_". This is because
50 st_atime et al are macros in sys/stat.h on Darwin, and using those names
51 screws things up.
53 struct vg_stat {
54 ULong dev;
55 ULong ino;
56 ULong nlink;
57 UInt mode;
58 UInt uid;
59 UInt gid;
60 ULong rdev;
61 Long size;
62 ULong blksize;
63 ULong blocks;
64 ULong atime;
65 ULong atime_nsec;
66 ULong mtime;
67 ULong mtime_nsec;
68 ULong ctime;
69 ULong ctime_nsec;
72 extern SysRes VG_(mknod) ( const HChar* pathname, Int mode, UWord dev );
73 extern SysRes VG_(open) ( const HChar* pathname, Int flags, Int mode );
74 /* fd_open words like the open(2) system call:
75 returns fd if success, -1 otherwise */
76 extern Int VG_(fd_open) (const HChar* pathname, Int flags, Int mode);
77 extern void VG_(close) ( Int fd );
78 extern Int VG_(read) ( Int fd, void* buf, Int count);
79 extern Int VG_(write) ( Int fd, const void* buf, Int count);
80 extern Int VG_(pipe) ( Int fd[2] );
81 extern Off64T VG_(lseek) ( Int fd, Off64T offset, Int whence );
83 extern SysRes VG_(stat) ( const HChar* file_name, struct vg_stat* buf );
84 extern Int VG_(fstat) ( Int fd, struct vg_stat* buf );
85 extern SysRes VG_(dup) ( Int oldfd );
86 extern SysRes VG_(dup2) ( Int oldfd, Int newfd );
87 extern Int VG_(rename) ( const HChar* old_name, const HChar* new_name );
88 extern Int VG_(unlink) ( const HChar* file_name );
90 extern SysRes VG_(poll) (struct vki_pollfd *fds, Int nfds, Int timeout);
92 extern SSizeT VG_(readlink)( const HChar* path, HChar* buf, SizeT bufsiz);
94 #if defined(VGO_linux) || defined(VGO_solaris)
95 extern Int VG_(getdents64)( Int fd, struct vki_dirent64 *dirp, UInt count );
96 #endif
98 extern const HChar* VG_(basename)( const HChar* path );
99 extern const HChar* VG_(dirname) ( const HChar* path );
101 /* Return the name of a directory for temporary files. */
102 extern const HChar* VG_(tmpdir)(void);
104 /* Return the working directory at startup. The returned string is
105 persistent. Might be NULL if the current working directory doesn't
106 exist. */
107 extern const HChar *VG_(get_startup_wd) ( void );
109 #endif // __PUB_TOOL_LIBCFILE_H
111 /*--------------------------------------------------------------------*/
112 /*--- end ---*/
113 /*--------------------------------------------------------------------*/