Index: trunk/include/iprt/mangling.h
===================================================================
--- trunk/include/iprt/mangling.h	(revision 84191)
+++ trunk/include/iprt/mangling.h	(revision 84192)
@@ -2808,4 +2808,5 @@
 # define RTVfsObjToFsStream                             RT_MANGLER(RTVfsObjToFsStream)
 # define RTVfsObjToIoStream                             RT_MANGLER(RTVfsObjToIoStream)
+# define RTVfsObjToPrivate                              RT_MANGLER(RTVfsObjToPrivate)
 # define RTVfsObjToSymlink                              RT_MANGLER(RTVfsObjToSymlink)
 # define RTVfsObjToVfs                                  RT_MANGLER(RTVfsObjToVfs)
@@ -2828,4 +2829,5 @@
 # define RTVfsSymlinkSetOwner                           RT_MANGLER(RTVfsSymlinkSetOwner)
 # define RTVfsSymlinkSetTimes                           RT_MANGLER(RTVfsSymlinkSetTimes)
+# define RTVfsSymlinkToPrivate                          RT_MANGLER(RTVfsSymlinkToPrivate)
 # define RTVfsUtilDummyPollOne                          RT_MANGLER(RTVfsUtilDummyPollOne)
 # define RTVfsUtilPumpIoStreams                         RT_MANGLER(RTVfsUtilPumpIoStreams)
Index: trunk/include/iprt/vfslowlevel.h
===================================================================
--- trunk/include/iprt/vfslowlevel.h	(revision 84191)
+++ trunk/include/iprt/vfslowlevel.h	(revision 84192)
@@ -311,4 +311,15 @@
                             PRTVFSOBJ phVfsObj, void **ppvInstance);
 
+
+/**
+ * Gets the private data of a base object.
+ *
+ * @returns Pointer to the private data.  NULL if the handle is invalid in some
+ *          way.
+ * @param   hVfsObj             The I/O base object handle.
+ * @param   pObjOps             The base object operations.  This servers as a
+ *                              sort of password.
+ */
+RTDECL(void *) RTVfsObjToPrivate(RTVFSOBJ hVfsObj, PCRTVFSOBJOPS pObjOps);
 
 /**
@@ -493,10 +504,10 @@
  *                              object.  The reference is consumed.  NIL and
  *                              special lock handles are fine.
- * @param   fReadOnly           Set if read-only, clear if write-only.
+ * @param   fAccess             RTFILE_O_READ and/or RTFILE_O_WRITE.
  * @param   phVfsFss            Where to return the new handle.
  * @param   ppvInstance         Where to return the pointer to the instance data
  *                              (size is @a cbInstance).
  */
-RTDECL(int) RTVfsNewFsStream(PCRTVFSFSSTREAMOPS pFsStreamOps, size_t cbInstance, RTVFS hVfs, RTVFSLOCK hLock, bool fReadOnly,
+RTDECL(int) RTVfsNewFsStream(PCRTVFSFSSTREAMOPS pFsStreamOps, size_t cbInstance, RTVFS hVfs, RTVFSLOCK hLock, uint32_t fAccess,
                              PRTVFSFSSTREAM phVfsFss, void **ppvInstance);
 
@@ -828,4 +839,15 @@
                             PRTVFSSYMLINK phVfsSym, void **ppvInstance);
 
+
+/**
+ * Gets the private data of a symbolic link.
+ *
+ * @returns Pointer to the private data.  NULL if the handle is invalid in some
+ *          way.
+ * @param   hVfsIos             The I/O stream handle.
+ * @param   pSymlinkOps         The symlink operations.  This servers as a sort
+ *                              of password.
+ */
+RTDECL(void *) RTVfsSymlinkToPrivate(RTVFSSYMLINK hVfsSym, PCRTVFSSYMLINKOPS pSymlinkOps);
 
 /**
Index: trunk/include/iprt/zip.h
===================================================================
--- trunk/include/iprt/zip.h	(revision 84191)
+++ trunk/include/iprt/zip.h	(revision 84192)
@@ -324,6 +324,8 @@
  *       twice. */
 #define RTZIPTAR_C_SPARSE           RT_BIT_32(0)
+/** Set if opening for updating. */
+#define RTZIPTAR_C_UPDATE           RT_BIT_32(1)
 /** Valid bits. */
-#define RTZIPTAR_C_VALID_MASK       UINT32_C(0x00000001)
+#define RTZIPTAR_C_VALID_MASK       UINT32_C(0x00000003)
 /** @} */
 
@@ -392,4 +394,26 @@
 RTDECL(int) RTZipTarFsStreamSetMTime(RTVFSFSSTREAM hVfsFss, PCRTTIMESPEC pModificationTime);
 
+/**
+ * Truncates a TAR creator stream in update mode.
+ *
+ * Use RTVfsFsStrmNext to examine the TAR stream and locate the cut-off point.
+ *
+ * After performing this call, the stream will be in write mode and
+ * RTVfsFsStrmNext will stop working (VERR_WRONG_ORDER).   The RTVfsFsStrmAdd()
+ * and RTVfsFsStrmPushFile() can be used to add new object to the TAR file,
+ * starting at the trunction point.  RTVfsFsStrmEnd() is used to finish the TAR
+ * file (this performs the actual file trunction).
+ *
+ * @returns IPRT status code.
+ * @param   hVfsFss             The handle to a TAR creator in update mode.
+ * @param   hVfsObj             Object returned by RTVfsFsStrmNext that the
+ *                              trunction is relative to.  This doesn't have to
+ *                              be the current stream object, it can be an
+ *                              earlier one too.
+ * @param   fAfter              If set, @a hVfsObj will remain in the update TAR
+ *                              file.  If clear, @a hVfsObj will not be
+ *                              included.
+ */
+RTDECL(int) RTZipTarFsStreamTruncate(RTVFSFSSTREAM hVfsFss, RTVFSOBJ hVfsObj, bool fAfter);
 
 /**
