misc/libphyslayer/hwpacksmounter.c
author nemo
Tue, 21 Aug 2018 15:11:28 -0400
branch0.9.24
changeset 13682 f60b3998ba56
parent 13395 fa81f809fbb9
child 15817 0defc1d3261d
permissions -rw-r--r--
only-stats should never create visual gears. and lua should never rely on visual gears being created. critical is just to help ensure ones important to gameplay don't get lost in fast-forward

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

#include "hwpacksmounter.h"

PHYSFS_DECL void hedgewarsMountPackages()
{
    char ** filesList = PHYSFS_enumerateFiles("/");
    char **i;

    for (i = filesList; *i != NULL; i++)
    {
        char * fileName = *i;
        int fileNameLength = strlen(fileName);
        if (fileNameLength > 4)
            if (strcmp(fileName + fileNameLength - 4, ".hwp") == 0)
            {
                const char * dir = PHYSFS_getRealDir(fileName);
                if(dir)
                {
                    char * fullPath = (char *)malloc(strlen(dir) + fileNameLength + 2);
                    strcpy(fullPath, dir);
                    strcat(fullPath, "/");
                    strcat(fullPath, fileName);

                    PHYSFS_mount(fullPath, NULL, 0);

                    free(fullPath);
                }
            }
    }

    PHYSFS_freeList(filesList);
}

PHYSFS_DECL void hedgewarsMountPackage(char * fileName)
{
    int fileNameLength = strlen(fileName);
    int dirLength = 0;
    if (fileNameLength > 4)
        if (strcmp(fileName + fileNameLength - 4, ".hwp") == 0)
        {
            const char * dir = PHYSFS_getRealDir(fileName);
            if(dir)
            {
				dirLength = strlen(dir);
				if (dirLength > 4)
				{
					if (strcmp(dir + dirLength - 4, ".hwp") == 0)
					{
#if PHYSFS_VER_MAJOR > 2 || PHYSFS_VER_MINOR > 0
						char * uniqName = (char *)malloc(strlen(dir) + fileNameLength + 2);
						strcpy(uniqName, dir);
						strcat(uniqName, ",");
						strcat(uniqName, fileName);
						PHYSFS_mountHandle(PHYSFS_openRead(fileName), uniqName, NULL, 0);
						free(uniqName);
#endif
					}
					else
					{
						char * fullPath = (char *)malloc(strlen(dir) + fileNameLength + 2);
						strcpy(fullPath, dir);
						strcat(fullPath, "/");
						strcat(fullPath, fileName);

						PHYSFS_mount(fullPath, NULL, 0);

						free(fullPath);
					}
				}
            }
        }
}