misc/libphyslayer/hwpacksmounter.c
author Wuzzy <Wuzzy2@mail.ru>
Fri, 09 Nov 2018 23:42:44 +0100
changeset 14191 a1178e1b57a6
parent 13395 fa81f809fbb9
child 15817 0defc1d3261d
permissions -rw-r--r--
Fix bad StrToInt call ('0x' instead of '$' for hex), confuses Pas2C
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8052
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
     1
#include <string.h>
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
     2
#include <stdio.h>
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
     3
#include <stdlib.h>
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
     4
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
     5
#include "hwpacksmounter.h"
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
     6
8119
257ffa847aa2 physfs: no carbon depency on osx, add cdecl attributes on extra functions
koda
parents: 8074
diff changeset
     7
PHYSFS_DECL void hedgewarsMountPackages()
8052
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
     8
{
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
     9
    char ** filesList = PHYSFS_enumerateFiles("/");
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    10
    char **i;
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    11
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    12
    for (i = filesList; *i != NULL; i++)
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    13
    {
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    14
        char * fileName = *i;
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    15
        int fileNameLength = strlen(fileName);
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    16
        if (fileNameLength > 4)
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    17
            if (strcmp(fileName + fileNameLength - 4, ".hwp") == 0)
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    18
            {
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    19
                const char * dir = PHYSFS_getRealDir(fileName);
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    20
                if(dir)
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    21
                {
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    22
                    char * fullPath = (char *)malloc(strlen(dir) + fileNameLength + 2);
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    23
                    strcpy(fullPath, dir);
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    24
                    strcat(fullPath, "/");
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    25
                    strcat(fullPath, fileName);
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    26
8714
ab201a62d115 Prepend, not append
unc0rr
parents: 8524
diff changeset
    27
                    PHYSFS_mount(fullPath, NULL, 0);
8052
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    28
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    29
                    free(fullPath);
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    30
                }
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    31
            }
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    32
    }
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    33
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    34
    PHYSFS_freeList(filesList);
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    35
}
8978
e6ef8fe314bd suggestion of unc0rr's to fix issue w/ random maps in campaign. load sidecar packages in physfs for lua. should be useful also for lua that does custom layouts
nemo
parents: 8714
diff changeset
    36
e6ef8fe314bd suggestion of unc0rr's to fix issue w/ random maps in campaign. load sidecar packages in physfs for lua. should be useful also for lua that does custom layouts
nemo
parents: 8714
diff changeset
    37
PHYSFS_DECL void hedgewarsMountPackage(char * fileName)
e6ef8fe314bd suggestion of unc0rr's to fix issue w/ random maps in campaign. load sidecar packages in physfs for lua. should be useful also for lua that does custom layouts
nemo
parents: 8714
diff changeset
    38
{
e6ef8fe314bd suggestion of unc0rr's to fix issue w/ random maps in campaign. load sidecar packages in physfs for lua. should be useful also for lua that does custom layouts
nemo
parents: 8714
diff changeset
    39
    int fileNameLength = strlen(fileName);
13393
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    40
    int dirLength = 0;
8978
e6ef8fe314bd suggestion of unc0rr's to fix issue w/ random maps in campaign. load sidecar packages in physfs for lua. should be useful also for lua that does custom layouts
nemo
parents: 8714
diff changeset
    41
    if (fileNameLength > 4)
e6ef8fe314bd suggestion of unc0rr's to fix issue w/ random maps in campaign. load sidecar packages in physfs for lua. should be useful also for lua that does custom layouts
nemo
parents: 8714
diff changeset
    42
        if (strcmp(fileName + fileNameLength - 4, ".hwp") == 0)
e6ef8fe314bd suggestion of unc0rr's to fix issue w/ random maps in campaign. load sidecar packages in physfs for lua. should be useful also for lua that does custom layouts
nemo
parents: 8714
diff changeset
    43
        {
e6ef8fe314bd suggestion of unc0rr's to fix issue w/ random maps in campaign. load sidecar packages in physfs for lua. should be useful also for lua that does custom layouts
nemo
parents: 8714
diff changeset
    44
            const char * dir = PHYSFS_getRealDir(fileName);
e6ef8fe314bd suggestion of unc0rr's to fix issue w/ random maps in campaign. load sidecar packages in physfs for lua. should be useful also for lua that does custom layouts
nemo
parents: 8714
diff changeset
    45
            if(dir)
e6ef8fe314bd suggestion of unc0rr's to fix issue w/ random maps in campaign. load sidecar packages in physfs for lua. should be useful also for lua that does custom layouts
nemo
parents: 8714
diff changeset
    46
            {
13393
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    47
				dirLength = strlen(dir);
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    48
				if (dirLength > 4)
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    49
				{
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    50
					if (strcmp(dir + dirLength - 4, ".hwp") == 0)
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    51
					{
13395
fa81f809fbb9 IFDEF for Phys 2.0 which has no mountHandle - result will just be no hwp in hwp on those systems, which would be rarely used and DLC only.
nemo
parents: 13393
diff changeset
    52
#if PHYSFS_VER_MAJOR > 2 || PHYSFS_VER_MINOR > 0
13393
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    53
						char * uniqName = (char *)malloc(strlen(dir) + fileNameLength + 2);
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    54
						strcpy(uniqName, dir);
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    55
						strcat(uniqName, ",");
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    56
						strcat(uniqName, fileName);
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    57
						PHYSFS_mountHandle(PHYSFS_openRead(fileName), uniqName, NULL, 0);
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    58
						free(uniqName);
13395
fa81f809fbb9 IFDEF for Phys 2.0 which has no mountHandle - result will just be no hwp in hwp on those systems, which would be rarely used and DLC only.
nemo
parents: 13393
diff changeset
    59
#endif
13393
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    60
					}
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    61
					else
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    62
					{
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    63
						char * fullPath = (char *)malloc(strlen(dir) + fileNameLength + 2);
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    64
						strcpy(fullPath, dir);
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    65
						strcat(fullPath, "/");
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    66
						strcat(fullPath, fileName);
8978
e6ef8fe314bd suggestion of unc0rr's to fix issue w/ random maps in campaign. load sidecar packages in physfs for lua. should be useful also for lua that does custom layouts
nemo
parents: 8714
diff changeset
    67
13393
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    68
						PHYSFS_mount(fullPath, NULL, 0);
8978
e6ef8fe314bd suggestion of unc0rr's to fix issue w/ random maps in campaign. load sidecar packages in physfs for lua. should be useful also for lua that does custom layouts
nemo
parents: 8714
diff changeset
    69
13393
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    70
						free(fullPath);
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    71
					}
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    72
				}
8978
e6ef8fe314bd suggestion of unc0rr's to fix issue w/ random maps in campaign. load sidecar packages in physfs for lua. should be useful also for lua that does custom layouts
nemo
parents: 8714
diff changeset
    73
            }
e6ef8fe314bd suggestion of unc0rr's to fix issue w/ random maps in campaign. load sidecar packages in physfs for lua. should be useful also for lua that does custom layouts
nemo
parents: 8714
diff changeset
    74
        }
e6ef8fe314bd suggestion of unc0rr's to fix issue w/ random maps in campaign. load sidecar packages in physfs for lua. should be useful also for lua that does custom layouts
nemo
parents: 8714
diff changeset
    75
}