dir.h revision b0dc7f42280da8e8931c18f740767365860c3551
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * IPRT - Directory Manipulation.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * Copyright (C) 2006-2007 Oracle Corporation
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * available from http://www.virtualbox.org. This file is free software;
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * you can redistribute it and/or modify it under the terms of the GNU
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * General Public License (GPL) as published by the Free Software
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * The contents of this file may alternatively be used under the terms
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * of the Common Development and Distribution License Version 1.0
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * VirtualBox OSE distribution, in which case the provisions of the
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * CDDL are applicable instead of those of the GPL.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * You may elect to license modified versions of this file under the
d4a9d525e6f2111d462d2d96462dced6b9ec00efvboxsync * terms and conditions of either the GPL or the CDDL or both.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync/** @defgroup grp_rt_dir RTDir - Directory Manipulation
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @ingroup grp_rt
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * Check for the existence of a directory.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * All symbolic links will be attemped resolved. If that is undesirable, please
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * use RTPathQueryInfo instead.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @returns true if exist and is a directory.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @returns false if not exists or isn't a directory.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @param pszPath Path to the directory.
687794577e2e35c3cae67e692a7f2130d1262a82vboxsync * Creates a directory.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @returns iprt status code.
702a8ee2dc1de96f2f77e97135015d3e243186fdvboxsync * @param pszPath Path to the directory to create.
702a8ee2dc1de96f2f77e97135015d3e243186fdvboxsync * @param fMode The mode of the new directory.
c142e0f462e6c921a73d84ee50f41396b3a99db5vboxsyncRTDECL(int) RTDirCreate(const char *pszPath, RTFMODE fMode);
d4a9d525e6f2111d462d2d96462dced6b9ec00efvboxsync * Creates a directory including all parent directories in the path
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * if they don't exist.
d4a9d525e6f2111d462d2d96462dced6b9ec00efvboxsync * @returns iprt status code.
5f2b03bf7695dabd71222dba123532a3f76828c1vboxsync * @param pszPath Path to the directory to create.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @param fMode The mode of the new directories.
5f2b03bf7695dabd71222dba123532a3f76828c1vboxsyncRTDECL(int) RTDirCreateFullPath(const char *pszPath, RTFMODE fMode);
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * Creates a new directory with a unique name using the given template.
02f7c106d33c45f99ec412a5fe0adde868f700fcvboxsync * One or more trailing X'es in the template will be replaced by random alpha
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * numeric characters until a RTDirCreate succeeds or we run out of patience.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * For instance:
d4a9d525e6f2111d462d2d96462dced6b9ec00efvboxsync * As an alternative to trailing X'es, it
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * is possible to put 3 or more X'es somewhere inside the directory name. In
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * the following string only the last bunch of X'es will be modified:
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * The directory is created with mode 0700.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @returns iprt status code.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @param pszTemplate The directory name template on input. The actual
702a8ee2dc1de96f2f77e97135015d3e243186fdvboxsync * directory name on success. Empty string on failure.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * Removes a directory if empty.
9523921c89c66f4bececdbd5ac95aed0039eda1bvboxsync * @returns iprt status code.
d4a9d525e6f2111d462d2d96462dced6b9ec00efvboxsync * @param pszPath Path to the directory to remove.
9523921c89c66f4bececdbd5ac95aed0039eda1bvboxsync * Removes a directory tree recursively.
9523921c89c66f4bececdbd5ac95aed0039eda1bvboxsync * @returns iprt status code.
d4a9d525e6f2111d462d2d96462dced6b9ec00efvboxsync * @param pszPath Path to the directory to remove recursively.
d4a9d525e6f2111d462d2d96462dced6b9ec00efvboxsync * @param fFlags Flags, see RTDIRRMREC_F_XXX.
d4a9d525e6f2111d462d2d96462dced6b9ec00efvboxsync * @remarks This will not work on a root directory.
9523921c89c66f4bececdbd5ac95aed0039eda1bvboxsyncRTDECL(int) RTDirRemoveRecursive(const char *pszPath, uint32_t fFlags);
9523921c89c66f4bececdbd5ac95aed0039eda1bvboxsync/** @name RTDirRemoveRecursive flags.
ed9d3db07648c7e3a979105c15ad752ee9ea18devboxsync/** Delete the content of the directory and the directory itself. */
ed9d3db07648c7e3a979105c15ad752ee9ea18devboxsync/** Only delete the content of the directory, omit the directory it self. */
ed9d3db07648c7e3a979105c15ad752ee9ea18devboxsync/** Mask of valid flags. */
d4a9d525e6f2111d462d2d96462dced6b9ec00efvboxsync#define RTDIRRMREC_F_VALID_MASK UINT32_C(0x00000001)
5f2b03bf7695dabd71222dba123532a3f76828c1vboxsync * Flushes the specified directory.
d4a9d525e6f2111d462d2d96462dced6b9ec00efvboxsync * This API is not implemented on all systems. On some systems it may be
d4a9d525e6f2111d462d2d96462dced6b9ec00efvboxsync * unnecessary if you've already flushed the file. If you really care for your
d4a9d525e6f2111d462d2d96462dced6b9ec00efvboxsync * data and is entering dangerous territories, it doesn't hurt calling it after
702a8ee2dc1de96f2f77e97135015d3e243186fdvboxsync * flushing and closing the file.
9523921c89c66f4bececdbd5ac95aed0039eda1bvboxsync * @returns IPRT status code.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @retval VERR_NOT_IMPLEMENTED must be expected.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @retval VERR_NOT_SUPPORTED must be expected.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @param pszPath Path to the directory.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * Flushes the parent directory of the specified file.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * This is just a wrapper around RTDirFlush.
702a8ee2dc1de96f2f77e97135015d3e243186fdvboxsync * @returns IPRT status code, see RTDirFlush for details.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @param pszChild Path to the file which parent should be flushed.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync/** Pointer to an open directory (sort of handle). */
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * Filter option for RTDirOpenFiltered().
06ea6bcf23874b662d499b3f130024c98b2dd7a6vboxsync /** The usual invalid 0 entry. */
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync /** No filter should be applied (and none was specified). */
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync /** The Windows NT filter.
702a8ee2dc1de96f2f77e97135015d3e243186fdvboxsync * The following wildcard chars: *, ?, <, > and "
702a8ee2dc1de96f2f77e97135015d3e243186fdvboxsync * The matching is done on the uppercased strings. */
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync /** The UNIX filter.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * The following wildcard chars: *, ?, [..]
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * The matching is done on exact case. */
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync /** The UNIX filter, uppercased matching.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * Same as RTDIRFILTER_UNIX except that the strings are uppercased before comparing. */
702a8ee2dc1de96f2f77e97135015d3e243186fdvboxsync /** The usual full 32-bit value. */
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * Directory entry type.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * This is the RTFS_TYPE_MASK stuff shifted down 12 bits and
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * identical to the BSD/LINUX ABI.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync /** Unknown type (DT_UNKNOWN). */
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync /** Named pipe (fifo) (DT_FIFO). */
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync /** Character device (DT_CHR). */
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync /** Directory (DT_DIR). */
702a8ee2dc1de96f2f77e97135015d3e243186fdvboxsync /** Block device (DT_BLK). */
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync /** Regular file (DT_REG). */
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync /** Symbolic link (DT_LNK). */
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync /** Socket (DT_SOCK). */
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync /** Whiteout (DT_WHT). */
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * Directory entry.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * This is inspired by the POSIX interfaces.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsynctypedef struct RTDIRENTRY
702a8ee2dc1de96f2f77e97135015d3e243186fdvboxsync /** The unique identifier (within the file system) of this file system object (d_ino).
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * Together with INodeIdDevice, this field can be used as a OS wide unique id
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * when both their values are not 0. This field is 0 if the information is not
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * available. */
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync /** The entry type. (d_type)
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * RTDIRENTRYTYPE_UNKNOWN is a common return value here since not all file
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * systems (or Unixes) stores the type of a directory entry and instead
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * expects the user to use stat() to get it. So, when you see this you
702a8ee2dc1de96f2f77e97135015d3e243186fdvboxsync * should use RTPathQueryInfo to get the type, or if if you're lazy, use
702a8ee2dc1de96f2f77e97135015d3e243186fdvboxsync * RTDirReadEx. */
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync /** The length of the filename, excluding the terminating nul character. */
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync /** The filename. (no path)
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * Using the pcbDirEntry parameter of RTDirRead makes this field variable in size. */
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync/** Pointer to a directory entry. */
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * Directory entry with extended information.
7e8ef90d3160234df0f254131b87af4243d79476vboxsync * This is inspired by the PC interfaces.
7e8ef90d3160234df0f254131b87af4243d79476vboxsynctypedef struct RTDIRENTRYEX
7e8ef90d3160234df0f254131b87af4243d79476vboxsync /** Full information about the object. */
7e8ef90d3160234df0f254131b87af4243d79476vboxsync /** The length of the short field (number of RTUTF16 entries (not chars)).
7e8ef90d3160234df0f254131b87af4243d79476vboxsync * It is 16-bit for reasons of alignment. */
7e8ef90d3160234df0f254131b87af4243d79476vboxsync /** The short name for 8.3 compatibility.
7e8ef90d3160234df0f254131b87af4243d79476vboxsync * Empty string if not available.
7e8ef90d3160234df0f254131b87af4243d79476vboxsync * Since the length is a bit tricky for a UTF-8 encoded name, and since this
7e8ef90d3160234df0f254131b87af4243d79476vboxsync * is practically speaking only a windows thing, it is encoded as UCS-2. */
7e8ef90d3160234df0f254131b87af4243d79476vboxsync /** The length of the filename. */
7e8ef90d3160234df0f254131b87af4243d79476vboxsync /** The filename. (no path)
06ea6bcf23874b662d499b3f130024c98b2dd7a6vboxsync * Using the pcbDirEntry parameter of RTDirReadEx makes this field variable in size. */
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync/** Pointer to a directory entry. */
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * Opens a directory.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @returns iprt status code.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @param ppDir Where to store the open directory pointer.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @param pszPath Path to the directory to open.
702a8ee2dc1de96f2f77e97135015d3e243186fdvboxsyncRTDECL(int) RTDirOpen(PRTDIR *ppDir, const char *pszPath);
702a8ee2dc1de96f2f77e97135015d3e243186fdvboxsync * Opens a directory filtering the entries using dos style wildcards.
702a8ee2dc1de96f2f77e97135015d3e243186fdvboxsync * @returns iprt status code.
702a8ee2dc1de96f2f77e97135015d3e243186fdvboxsync * @param ppDir Where to store the open directory pointer.
702a8ee2dc1de96f2f77e97135015d3e243186fdvboxsync * @param pszPath Path to the directory to search, this must include wildcards.
702a8ee2dc1de96f2f77e97135015d3e243186fdvboxsync * @param enmFilter The kind of filter to apply. Setting this to RTDIRFILTER_NONE makes
702a8ee2dc1de96f2f77e97135015d3e243186fdvboxsync * this function behave like RTDirOpen.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsyncRTDECL(int) RTDirOpenFiltered(PRTDIR *ppDir, const char *pszPath, RTDIRFILTER enmFilter);
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * Closes a directory.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @returns iprt status code.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @param pDir Pointer to open directory returned by RTDirOpen() or RTDirOpenFiltered().
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * Reads the next entry in the directory.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @returns VINF_SUCCESS and data in pDirEntry on success.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @returns VERR_NO_MORE_FILES when the end of the directory has been reached.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @returns VERR_BUFFER_OVERFLOW if the buffer is too small to contain the filename. If
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * pcbDirEntry is specified it will be updated with the required buffer size.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @returns suitable iprt status code on other errors.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @param pDir Pointer to the open directory.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @param pDirEntry Where to store the information about the next
702a8ee2dc1de96f2f77e97135015d3e243186fdvboxsync * directory entry on success.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @param pcbDirEntry Optional parameter used for variable buffer size.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * On input the variable pointed to contains the size of the pDirEntry
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * structure. This must be at least OFFSET(RTDIRENTRY, szName[2]) bytes.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * On successful output the field is updated to
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * OFFSET(RTDIRENTRY, szName[pDirEntry->cbName + 1]).
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * When the data doesn't fit in the buffer and VERR_BUFFER_OVERFLOW is
702a8ee2dc1de96f2f77e97135015d3e243186fdvboxsync * returned, this field contains the required buffer size.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * The value is unchanged in all other cases.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsyncRTDECL(int) RTDirRead(PRTDIR pDir, PRTDIRENTRY pDirEntry, size_t *pcbDirEntry);
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * Reads the next entry in the directory returning extended information.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @returns VINF_SUCCESS and data in pDirEntry on success.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @returns VERR_NO_MORE_FILES when the end of the directory has been reached.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @returns VERR_BUFFER_OVERFLOW if the buffer is too small to contain the filename. If
702a8ee2dc1de96f2f77e97135015d3e243186fdvboxsync * pcbDirEntry is specified it will be updated with the required buffer size.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @returns suitable iprt status code on other errors.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @param pDir Pointer to the open directory.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @param pDirEntry Where to store the information about the next
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * directory entry on success.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @param pcbDirEntry Optional parameter used for variable buffer size.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * On input the variable pointed to contains the size of the pDirEntry
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * structure. This must be at least OFFSET(RTDIRENTRYEX, szName[2]) bytes.
702a8ee2dc1de96f2f77e97135015d3e243186fdvboxsync * On successful output the field is updated to
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * OFFSET(RTDIRENTRYEX, szName[pDirEntry->cbName + 1]).
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * When the data doesn't fit in the buffer and VERR_BUFFER_OVERFLOW is
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * returned, this field contains the required buffer size.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * The value is unchanged in all other cases.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @param enmAdditionalAttribs
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * Which set of additional attributes to request.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * Use RTFSOBJATTRADD_NOTHING if this doesn't matter.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsync * @param fFlags RTPATH_F_ON_LINK or RTPATH_F_FOLLOW_LINK.
2f3883b126a405f92b19e829472f614c7352b4f9vboxsyncRTDECL(int) RTDirReadEx(PRTDIR pDir, PRTDIRENTRYEX pDirEntry, size_t *pcbDirEntry, RTFSOBJATTRADD enmAdditionalAttribs, uint32_t fFlags);
d4a9d525e6f2111d462d2d96462dced6b9ec00efvboxsync * Renames a file.
d4a9d525e6f2111d462d2d96462dced6b9ec00efvboxsync * Identical to RTPathRename except that it will ensure that the source is a directory.
d4a9d525e6f2111d462d2d96462dced6b9ec00efvboxsync * @returns IPRT status code.
d4a9d525e6f2111d462d2d96462dced6b9ec00efvboxsync * @returns VERR_ALREADY_EXISTS if the destination file exists.
d4a9d525e6f2111d462d2d96462dced6b9ec00efvboxsync * @param pszSrc The path to the source file.
d4a9d525e6f2111d462d2d96462dced6b9ec00efvboxsync * @param pszDst The path to the destination file.
d4a9d525e6f2111d462d2d96462dced6b9ec00efvboxsync * This file will be created.
d4a9d525e6f2111d462d2d96462dced6b9ec00efvboxsync * @param fRename See RTPathRename.
5f2b03bf7695dabd71222dba123532a3f76828c1vboxsyncRTDECL(int) RTDirRename(const char *pszSrc, const char *pszDst, unsigned fRename);
d4a9d525e6f2111d462d2d96462dced6b9ec00efvboxsync * Query information about an open directory.
d4a9d525e6f2111d462d2d96462dced6b9ec00efvboxsync * @returns iprt status code.
35e6d303696e46d969aaf9a59cc381333a483b0bvboxsync * @param pDir Pointer to the open directory.
35e6d303696e46d969aaf9a59cc381333a483b0bvboxsync * @param pObjInfo Object information structure to be filled on successful return.
35e6d303696e46d969aaf9a59cc381333a483b0bvboxsync * @param enmAdditionalAttribs Which set of additional attributes to request.
35e6d303696e46d969aaf9a59cc381333a483b0bvboxsync * Use RTFSOBJATTRADD_NOTHING if this doesn't matter.
35e6d303696e46d969aaf9a59cc381333a483b0bvboxsyncRTR3DECL(int) RTDirQueryInfo(PRTDIR pDir, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAdditionalAttribs);
35e6d303696e46d969aaf9a59cc381333a483b0bvboxsync * Changes one or more of the timestamps associated of file system object.
35e6d303696e46d969aaf9a59cc381333a483b0bvboxsync * @returns iprt status code.
35e6d303696e46d969aaf9a59cc381333a483b0bvboxsync * @returns VERR_NOT_SUPPORTED is returned if the operation isn't supported by the OS.
35e6d303696e46d969aaf9a59cc381333a483b0bvboxsync * @param pDir Pointer to the open directory.
35e6d303696e46d969aaf9a59cc381333a483b0bvboxsync * @param pAccessTime Pointer to the new access time. NULL if not to be changed.
35e6d303696e46d969aaf9a59cc381333a483b0bvboxsync * @param pModificationTime Pointer to the new modifcation time. NULL if not to be changed.
35e6d303696e46d969aaf9a59cc381333a483b0bvboxsync * @param pChangeTime Pointer to the new change time. NULL if not to be changed.
35e6d303696e46d969aaf9a59cc381333a483b0bvboxsync * @param pBirthTime Pointer to the new time of birth. NULL if not to be changed.
35e6d303696e46d969aaf9a59cc381333a483b0bvboxsync * @remark The file system might not implement all these time attributes,
35e6d303696e46d969aaf9a59cc381333a483b0bvboxsync * the API will ignore the ones which aren't supported.
35e6d303696e46d969aaf9a59cc381333a483b0bvboxsync * @remark The file system might not implement the time resolution
35e6d303696e46d969aaf9a59cc381333a483b0bvboxsync * employed by this interface, the time will be chopped to fit.
35e6d303696e46d969aaf9a59cc381333a483b0bvboxsync * @remark The file system may update the change time even if it's
35e6d303696e46d969aaf9a59cc381333a483b0bvboxsync * not specified.
35e6d303696e46d969aaf9a59cc381333a483b0bvboxsync * @remark POSIX can only set Access & Modification and will always set both.
35e6d303696e46d969aaf9a59cc381333a483b0bvboxsyncRTR3DECL(int) RTDirSetTimes(PRTDIR pDir, PCRTTIMESPEC pAccessTime, PCRTTIMESPEC pModificationTime,
35e6d303696e46d969aaf9a59cc381333a483b0bvboxsync PCRTTIMESPEC pChangeTime, PCRTTIMESPEC pBirthTime);
35e6d303696e46d969aaf9a59cc381333a483b0bvboxsync#endif /* IN_RING3 */