Index: /trunk/include/iprt/string.h
===================================================================
--- /trunk/include/iprt/string.h	(revision 84206)
+++ /trunk/include/iprt/string.h	(revision 84207)
@@ -1506,4 +1506,6 @@
  *                            Use the precision to specify the length. Default length is 16 bytes.
  *                            The width, if specified, is ignored.
+ *                            The space separtor can get change to a colon by
+ *                            using the ' flag, and removed entirely using \#.
  *      - \%RhXd            - Same as \%Rhxd, but takes an additional uint64_t
  *                            value with the memory start address/offset after
Index: /trunk/src/VBox/Runtime/common/string/strformatrt.cpp
===================================================================
--- /trunk/src/VBox/Runtime/common/string/strformatrt.cpp	(revision 84206)
+++ /trunk/src/VBox/Runtime/common/string/strformatrt.cpp	(revision 84207)
@@ -988,4 +988,6 @@
                                 /*
                                  * Hex string.
+                                 * The default separator is ' ', RTSTR_F_THOUSAND_SEP changes it to ':',
+                                 * and RTSTR_F_SPECIAL removes it.
                                  */
                                 case 's':
@@ -998,6 +1000,13 @@
                                             cch = RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, "%0*llx: %02x",
                                                               cchMemAddrWidth, uMemAddr, *pu8++);
-                                        for (; cchPrecision > 0; cchPrecision--, pu8++)
-                                            cch += RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, " %02x", *pu8);
+                                        if (!(fFlags & (RTSTR_F_SPECIAL | RTSTR_F_THOUSAND_SEP)))
+                                            for (; cchPrecision > 0; cchPrecision--, pu8++)
+                                                cch += RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, " %02x", *pu8);
+                                        else if (fFlags & RTSTR_F_SPECIAL)
+                                            for (; cchPrecision > 0; cchPrecision--, pu8++)
+                                                cch += RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, "%02x", *pu8);
+                                        else
+                                            for (; cchPrecision > 0; cchPrecision--, pu8++)
+                                                cch += RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, ":%02x", *pu8);
                                         return cch;
                                     }
Index: /trunk/src/VBox/Runtime/common/zip/tarvfswriter.cpp
===================================================================
--- /trunk/src/VBox/Runtime/common/zip/tarvfswriter.cpp	(revision 84206)
+++ /trunk/src/VBox/Runtime/common/zip/tarvfswriter.cpp	(revision 84207)
@@ -2134,5 +2134,5 @@
     AssertPtrReturn(phVfsFss, VERR_INVALID_HANDLE);
     *phVfsFss = NIL_RTVFSFSSTREAM;
-    AssertPtrReturn(hVfsFile != NIL_RTVFSFILE, VERR_INVALID_HANDLE);
+    AssertReturn(hVfsFile != NIL_RTVFSFILE, VERR_INVALID_HANDLE);
     AssertReturn(enmFormat > RTZIPTARFORMAT_INVALID && enmFormat < RTZIPTARFORMAT_END, VERR_INVALID_PARAMETER);
     AssertReturn(!(fFlags & ~RTZIPTAR_C_VALID_MASK), VERR_INVALID_FLAGS);
@@ -2159,5 +2159,6 @@
     size_t const            cbThis = sizeof(*pThis) + (fFlags & RTZIPTAR_C_UPDATE ? sizeof(*pThis->pRead) : 0);
     RTVFSFSSTREAM           hVfsFss;
-    int rc = RTVfsNewFsStream(&g_rtZipTarFssOps, cbThis, NIL_RTVFS, NIL_RTVFSLOCK, RTFILE_O_WRITE,
+    int rc = RTVfsNewFsStream(&g_rtZipTarFssOps, cbThis, NIL_RTVFS, NIL_RTVFSLOCK,
+                              fFlags & RTZIPTAR_C_UPDATE ? RTFILE_O_READWRITE : RTFILE_O_WRITE,
                               &hVfsFss, (void **)&pThis);
     if (RT_SUCCESS(rc))
