2 /*--------------------------------------------------------------------*/
3 /*--- File/socket-related libc stuff. pub_tool_libcfile.h ---*/
4 /*--------------------------------------------------------------------*/
7 This file is part of Valgrind, a dynamic binary instrumentation
10 Copyright (C) 2000-2013 Julian Seward
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
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
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
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
);
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
108 extern const HChar
*VG_(get_startup_wd
) ( void );
110 #endif // __PUB_TOOL_LIBCFILE_H
112 /*--------------------------------------------------------------------*/
114 /*--------------------------------------------------------------------*/