blob: c03842a0e5f42bdecc4f4a9914d19e01e0de19e9 [file] [log] [blame]
njneb8896b2005-06-04 20:03:55 +00001
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
Elliott Hughesed398002017-06-21 14:41:24 -070010 Copyright (C) 2000-2017 Julian Seward
njneb8896b2005-06-04 20:03:55 +000011 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
florian535fb1b2013-09-15 13:54:34 +000034#include "pub_tool_basics.h" // VG_ macro
35#include "pub_tool_vki.h" // vki_dirent et al.
36
njneb8896b2005-06-04 20:03:55 +000037/* ---------------------------------------------------------------------
38 File-related functions.
39 ------------------------------------------------------------------ */
40
sewardj9a66bb92006-10-17 01:38:13 +000041/* To use this file you must first include pub_tool_vki.h. */
42
sewardjec61b652008-08-19 07:03:04 +000043/* 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
njn9c20ece2009-05-20 02:02:30 +000049 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*/
sewardjec61b652008-08-19 07:03:04 +000055struct vg_stat {
njn9c20ece2009-05-20 02:02:30 +000056 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;
sewardjec61b652008-08-19 07:03:04 +000072};
73
florian19f91bb2012-11-10 22:29:54 +000074extern SysRes VG_(mknod) ( const HChar* pathname, Int mode, UWord dev );
75extern SysRes VG_(open) ( const HChar* pathname, Int flags, Int mode );
sewardj3b290482011-05-06 21:02:55 +000076/* fd_open words like the open(2) system call:
77 returns fd if success, -1 otherwise */
florian19f91bb2012-11-10 22:29:54 +000078extern Int VG_(fd_open) (const HChar* pathname, Int flags, Int mode);
sewardj92645592005-07-23 09:18:34 +000079extern void VG_(close) ( Int fd );
80extern Int VG_(read) ( Int fd, void* buf, Int count);
81extern Int VG_(write) ( Int fd, const void* buf, Int count);
82extern Int VG_(pipe) ( Int fd[2] );
tomc17c6ef2011-07-13 09:02:14 +000083extern Off64T VG_(lseek) ( Int fd, Off64T offset, Int whence );
njneb8896b2005-06-04 20:03:55 +000084
florian19f91bb2012-11-10 22:29:54 +000085extern SysRes VG_(stat) ( const HChar* file_name, struct vg_stat* buf );
sewardjec61b652008-08-19 07:03:04 +000086extern Int VG_(fstat) ( Int fd, struct vg_stat* buf );
sewardj45f4e7c2005-09-27 19:20:21 +000087extern SysRes VG_(dup) ( Int oldfd );
njnfad98372008-10-12 19:53:28 +000088extern SysRes VG_(dup2) ( Int oldfd, Int newfd );
florian19f91bb2012-11-10 22:29:54 +000089extern Int VG_(rename) ( const HChar* old_name, const HChar* new_name );
90extern Int VG_(unlink) ( const HChar* file_name );
njneb8896b2005-06-04 20:03:55 +000091
philippe42545842013-12-05 22:10:55 +000092extern SysRes VG_(poll) (struct vki_pollfd *fds, Int nfds, Int timeout);
sewardj3b290482011-05-06 21:02:55 +000093
floriana175ffb2014-10-14 21:01:33 +000094extern SSizeT VG_(readlink)( const HChar* path, HChar* buf, SizeT bufsiz);
sewardjb69cd962014-09-01 22:26:18 +000095
sewardj8eb8bab2015-07-21 14:44:28 +000096#if defined(VGO_linux) || defined(VGO_solaris)
mjw495c6562014-08-29 14:28:30 +000097extern Int VG_(getdents64)( Int fd, struct vki_dirent64 *dirp, UInt count );
sewardjb69cd962014-09-01 22:26:18 +000098#endif
njneb8896b2005-06-04 20:03:55 +000099
florian6bd9dc12012-11-23 16:17:43 +0000100extern const HChar* VG_(basename)( const HChar* path );
101extern const HChar* VG_(dirname) ( const HChar* path );
njnf76d27a2009-05-28 01:53:07 +0000102
weidendod585c922011-10-17 18:12:48 +0000103/* Return the name of a directory for temporary files. */
104extern const HChar* VG_(tmpdir)(void);
105
florian29d82f62014-09-27 17:42:07 +0000106/* Return the working directory at startup. The returned string is
Elliott Hughesa0664b92017-04-18 17:46:52 -0700107 persistent. Might be NULL if the current working directory doesn't
108 exist. */
florian29d82f62014-09-27 17:42:07 +0000109extern const HChar *VG_(get_startup_wd) ( void );
sewardj198f34f2007-07-09 23:13:07 +0000110
njneb8896b2005-06-04 20:03:55 +0000111#endif // __PUB_TOOL_LIBCFILE_H
112
113/*--------------------------------------------------------------------*/
114/*--- end ---*/
115/*--------------------------------------------------------------------*/