+static BOOL check_tar_archive(const char *archive, CHAR *tarName)
+{
+ int len;
+ int nameLen;
+ const char *pos = archive;
+ const char *slash = archive;
+
+ while (*pos)
+ {
+ if (*pos == '\\' || *pos == '/')
+ {
+ slash = pos;
+ }
+ pos++;
+ }
+
+ len = (int)strlen(slash);
+
+ if (len > 7 && (strncmp(slash + len - 7, ".tar.gz", 7) == 0 || strncmp(slash + len - 7, ".tar.xz", 7) == 0))
+ {
+ nameLen = (int)sprintf_s(tarName, MAX_PATH, "X:%s", slash);
+ tarName[nameLen - 3] = 0;
+ return TRUE;
+ }
+ else if (len > 8 && strncmp(slash + len - 8, ".tar.bz2", 8) == 0)
+ {
+ nameLen = (int)sprintf_s(tarName, MAX_PATH, "X:%s", slash);
+ tarName[nameLen - 4] = 0;
+ return TRUE;
+ }
+ else if (len > 9 && strncmp(slash + len - 9, ".tar.lzma", 9) == 0)
+ {
+ nameLen = (int)sprintf_s(tarName, MAX_PATH, "X:%s", slash);
+ tarName[nameLen - 5] = 0;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+