drd: Add a consistency check
[valgrind.git] / include / pub_tool_libcfile.h
blob3df5be56c62cc67aa6c82812e69346a399909859
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-2013 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, write to the Free Software
25 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
26 02111-1307, USA.
28 The GNU General Public License is contained in the file COPYING.
31 #ifndef __PUB_TOOL_LIBCFILE_H
32 #define __PUB_TOOL_LIBCFILE_H
34 #include "pub_tool_basics.h" // VG_ macro
35 #include "pub_tool_vki.h" // vki_dirent et al.
37 /* ---------------------------------------------------------------------
38 File-related functions.
39 ------------------------------------------------------------------ */
41 /* To use this file you must first include pub_tool_vki.h. */
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.
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.
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;
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 );
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 );
92 extern SysRes VG_(poll) (struct vki_pollfd *fds, Int nfds, Int timeout);
94 extern SSizeT VG_(readlink)( const HChar* path, HChar* buf, SizeT bufsiz);
96 #if defined(VGO_linux)
97 extern Int VG_(getdents64)( Int fd, struct vki_dirent64 *dirp, UInt count );
98 #endif
100 extern const HChar* VG_(basename)( const HChar* path );
101 extern const HChar* VG_(dirname) ( const HChar* path );
103 /* Return the name of a directory for temporary files. */
104 extern const HChar* VG_(tmpdir)(void);
106 /* Return the working directory at startup. The returned string is
107 persistent. */
108 extern const HChar *VG_(get_startup_wd) ( void );
110 #endif // __PUB_TOOL_LIBCFILE_H
112 /*--------------------------------------------------------------------*/
113 /*--- end ---*/
114 /*--------------------------------------------------------------------*/