mirror of
https://github.com/wiiu-env/libromfs_wiiu.git
synced 2024-11-27 04:14:13 +01:00
Format the code via clang-format
This commit is contained in:
parent
96be7edd0e
commit
3bdd79b69e
67
.clang-format
Normal file
67
.clang-format
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
# Generated from CLion C/C++ Code Style settings
|
||||||
|
BasedOnStyle: LLVM
|
||||||
|
AccessModifierOffset: -4
|
||||||
|
AlignAfterOpenBracket: Align
|
||||||
|
AlignConsecutiveAssignments: Consecutive
|
||||||
|
AlignConsecutiveMacros: AcrossEmptyLinesAndComments
|
||||||
|
AlignOperands: Align
|
||||||
|
AllowAllArgumentsOnNextLine: false
|
||||||
|
AllowAllConstructorInitializersOnNextLine: false
|
||||||
|
AllowAllParametersOfDeclarationOnNextLine: false
|
||||||
|
AllowShortBlocksOnASingleLine: Always
|
||||||
|
AllowShortCaseLabelsOnASingleLine: false
|
||||||
|
AllowShortFunctionsOnASingleLine: All
|
||||||
|
AllowShortIfStatementsOnASingleLine: Always
|
||||||
|
AllowShortLambdasOnASingleLine: All
|
||||||
|
AllowShortLoopsOnASingleLine: true
|
||||||
|
AlwaysBreakAfterReturnType: None
|
||||||
|
AlwaysBreakTemplateDeclarations: Yes
|
||||||
|
BreakBeforeBraces: Custom
|
||||||
|
BraceWrapping:
|
||||||
|
AfterCaseLabel: false
|
||||||
|
AfterClass: false
|
||||||
|
AfterControlStatement: Never
|
||||||
|
AfterEnum: false
|
||||||
|
AfterFunction: false
|
||||||
|
AfterNamespace: false
|
||||||
|
AfterUnion: false
|
||||||
|
BeforeCatch: false
|
||||||
|
BeforeElse: false
|
||||||
|
IndentBraces: false
|
||||||
|
SplitEmptyFunction: false
|
||||||
|
SplitEmptyRecord: true
|
||||||
|
BreakBeforeBinaryOperators: None
|
||||||
|
BreakBeforeTernaryOperators: true
|
||||||
|
BreakConstructorInitializers: BeforeColon
|
||||||
|
BreakInheritanceList: BeforeColon
|
||||||
|
ColumnLimit: 0
|
||||||
|
CompactNamespaces: false
|
||||||
|
ContinuationIndentWidth: 8
|
||||||
|
IndentCaseLabels: true
|
||||||
|
IndentPPDirectives: None
|
||||||
|
IndentWidth: 4
|
||||||
|
KeepEmptyLinesAtTheStartOfBlocks: true
|
||||||
|
MaxEmptyLinesToKeep: 2
|
||||||
|
NamespaceIndentation: All
|
||||||
|
ObjCSpaceAfterProperty: false
|
||||||
|
ObjCSpaceBeforeProtocolList: true
|
||||||
|
PointerAlignment: Right
|
||||||
|
ReflowComments: false
|
||||||
|
SpaceAfterCStyleCast: true
|
||||||
|
SpaceAfterLogicalNot: false
|
||||||
|
SpaceAfterTemplateKeyword: false
|
||||||
|
SpaceBeforeAssignmentOperators: true
|
||||||
|
SpaceBeforeCpp11BracedList: false
|
||||||
|
SpaceBeforeCtorInitializerColon: true
|
||||||
|
SpaceBeforeInheritanceColon: true
|
||||||
|
SpaceBeforeParens: ControlStatements
|
||||||
|
SpaceBeforeRangeBasedForLoopColon: true
|
||||||
|
SpaceInEmptyParentheses: false
|
||||||
|
SpacesBeforeTrailingComments: 1
|
||||||
|
SpacesInAngles: false
|
||||||
|
SpacesInCStyleCastParentheses: false
|
||||||
|
SpacesInContainerLiterals: false
|
||||||
|
SpacesInParentheses: false
|
||||||
|
SpacesInSquareBrackets: false
|
||||||
|
TabWidth: 4
|
||||||
|
UseTab: Never
|
25
.github/workflows/pr.yml
vendored
Normal file
25
.github/workflows/pr.yml
vendored
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
name: CI-PR
|
||||||
|
|
||||||
|
on: [pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
clang-format:
|
||||||
|
runs-on: ubuntu-18.04
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: clang-format
|
||||||
|
run: |
|
||||||
|
docker run --rm -v ${PWD}:/src wiiuenv/clang-format:13.0.0-2 -r ./source ./include
|
||||||
|
build-lib:
|
||||||
|
runs-on: ubuntu-18.04
|
||||||
|
needs: clang-format
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: build lib
|
||||||
|
run: |
|
||||||
|
docker build . -f Dockerfile.buildlocal -t builder
|
||||||
|
docker run --rm -v ${PWD}:/project builder make
|
||||||
|
- uses: actions/upload-artifact@master
|
||||||
|
with:
|
||||||
|
name: lib
|
||||||
|
path: "lib/*.a"
|
13
.github/workflows/push_image.yml
vendored
13
.github/workflows/push_image.yml
vendored
@ -4,13 +4,21 @@ on:
|
|||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
jobs:
|
jobs:
|
||||||
|
clang-format:
|
||||||
|
runs-on: ubuntu-18.04
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: clang-format
|
||||||
|
run: |
|
||||||
|
docker run --rm -v ${PWD}:/src wiiuenv/clang-format:13.0.0-2 -r ./source ./include
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
needs: clang-format
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@master
|
- uses: actions/checkout@master
|
||||||
- name: Get release version
|
- name: Get release version
|
||||||
id: get_release_tag
|
id: get_release_tag
|
||||||
run: |
|
run: |
|
||||||
echo RELEASE_VERSION=$(echo $(date '+%Y%m%d')) >> $GITHUB_ENV
|
echo RELEASE_VERSION=$(echo $(date '+%Y%m%d')) >> $GITHUB_ENV
|
||||||
echo REPOSITORY_NAME=$(echo "$GITHUB_REPOSITORY" | awk -F / '{print $2}' | sed -e "s/:refs//" | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV
|
echo REPOSITORY_NAME=$(echo "$GITHUB_REPOSITORY" | awk -F / '{print $2}' | sed -e "s/:refs//" | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV
|
||||||
echo REPOSITORY_OWNER=$(echo "$GITHUB_REPOSITORY" | awk -F / '{print $1}' | sed 's/[^a-zA-Z0-9]//g' | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV
|
echo REPOSITORY_OWNER=$(echo "$GITHUB_REPOSITORY" | awk -F / '{print $1}' | sed 's/[^a-zA-Z0-9]//g' | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV
|
||||||
@ -22,5 +30,4 @@ jobs:
|
|||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
snapshot: true
|
snapshot: true
|
||||||
cache: true
|
cache: true
|
||||||
tags: "latest, ${{ env.RELEASE_VERSION }}"
|
tags: "latest, ${{ env.RELEASE_VERSION }}"
|
||||||
dockerfile: Dockerfile
|
|
@ -1,4 +1,4 @@
|
|||||||
FROM wiiuenv/devkitppc:20210920
|
FROM wiiuenv/devkitppc:20211229
|
||||||
|
|
||||||
WORKDIR tmp_build
|
WORKDIR tmp_build
|
||||||
COPY . .
|
COPY . .
|
||||||
|
3
Dockerfile.buildlocal
Normal file
3
Dockerfile.buildlocal
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
FROM wiiuenv/devkitppc:20211229
|
||||||
|
|
||||||
|
WORKDIR project
|
@ -1,3 +1,5 @@
|
|||||||
|
[![Publish Docker Image](https://github.com/wiiu-env/libromfs_wiiu/actions/workflows/push_image.yml/badge.svg)](https://github.com/wiiu-env/libromfs_wiiu/actions/workflows/push_image.yml)
|
||||||
|
|
||||||
# libromfs
|
# libromfs
|
||||||
Ported from [libnx](https://github.com/switchbrew/libnx/blob/e5ae43f4c2cca5320559d9c27ce256b2901aed40/nx/source/runtime/devices/romfs_dev.c)
|
Ported from [libnx](https://github.com/switchbrew/libnx/blob/e5ae43f4c2cca5320559d9c27ce256b2901aed40/nx/source/runtime/devices/romfs_dev.c)
|
||||||
|
|
||||||
@ -16,3 +18,7 @@ COPY --from=wiiuenv/libromfs_wiiu:[tag] /artifacts $DEVKITPRO
|
|||||||
```
|
```
|
||||||
Replace [tag] with a tag you want to use, a list of tags can be found [here](https://hub.docker.com/r/wiiuenv/libromfs_wiiu/tags).
|
Replace [tag] with a tag you want to use, a list of tags can be found [here](https://hub.docker.com/r/wiiuenv/libromfs_wiiu/tags).
|
||||||
It's highly recommended to pin the version to the **latest date** instead of using `latest`.
|
It's highly recommended to pin the version to the **latest date** instead of using `latest`.
|
||||||
|
|
||||||
|
## Format the code via docker
|
||||||
|
|
||||||
|
`docker run --rm -v ${PWD}:/src wiiuenv/clang-format:13.0.0-2 -r ./source ./include -i`
|
@ -34,7 +34,7 @@ typedef struct {
|
|||||||
uint32_t childFile; ///< Offset of the first file.
|
uint32_t childFile; ///< Offset of the first file.
|
||||||
uint32_t nextHash; ///< Directory hash table pointer.
|
uint32_t nextHash; ///< Directory hash table pointer.
|
||||||
uint32_t nameLen; ///< Name length.
|
uint32_t nameLen; ///< Name length.
|
||||||
uint8_t name[]; ///< Name. (UTF-8)
|
uint8_t name[]; ///< Name. (UTF-8)
|
||||||
} romfs_dir;
|
} romfs_dir;
|
||||||
|
|
||||||
/// RomFS file.
|
/// RomFS file.
|
||||||
@ -45,7 +45,7 @@ typedef struct {
|
|||||||
uint64_t dataSize; ///< Length of the file's data.
|
uint64_t dataSize; ///< Length of the file's data.
|
||||||
uint32_t nextHash; ///< File hash table pointer.
|
uint32_t nextHash; ///< File hash table pointer.
|
||||||
uint32_t nameLen; ///< Name length.
|
uint32_t nameLen; ///< Name length.
|
||||||
uint8_t name[]; ///< Name. (UTF-8)
|
uint8_t name[]; ///< Name. (UTF-8)
|
||||||
} romfs_file;
|
} romfs_file;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
@ -76,7 +76,7 @@ int32_t romfsUnmount(const char *name);
|
|||||||
|
|
||||||
/// RomFS file.
|
/// RomFS file.
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint64_t length; ///< Offset of the file's data.
|
uint64_t length; ///< Offset of the file's data.
|
||||||
uint64_t offset; ///< Length of the file's data.
|
uint64_t offset; ///< Length of the file's data.
|
||||||
} romfs_fileInfo;
|
} romfs_fileInfo;
|
||||||
|
|
||||||
@ -85,4 +85,3 @@ int romfsGetFileInfoPerPath(const char *romfs, const char *path, romfs_fileInfo
|
|||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
|
#include <coreinit/cache.h>
|
||||||
|
#include <coreinit/filesystem.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
#include <malloc.h>
|
||||||
|
#include <stdbool.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/dirent.h>
|
#include <sys/dirent.h>
|
||||||
#include <sys/iosupport.h>
|
#include <sys/iosupport.h>
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdbool.h>
|
|
||||||
#include <malloc.h>
|
|
||||||
#include <coreinit/cache.h>
|
|
||||||
#include <coreinit/filesystem.h>
|
|
||||||
|
|
||||||
#include "romfs_dev.h"
|
#include "romfs_dev.h"
|
||||||
|
|
||||||
@ -37,8 +37,8 @@ extern char **__system_argv;
|
|||||||
//static char __thread __component[PATH_MAX+1];
|
//static char __thread __component[PATH_MAX+1];
|
||||||
static char __component[PATH_MAX + 1];
|
static char __component[PATH_MAX + 1];
|
||||||
|
|
||||||
#define romFS_root(m) ((romfs_dir*)(m)->dirTable)
|
#define romFS_root(m) ((romfs_dir *) (m)->dirTable)
|
||||||
#define romFS_none ((uint32_t)~0)
|
#define romFS_none ((uint32_t) ~0)
|
||||||
#define romFS_dir_mode (S_IFDIR | S_IRUSR | S_IRGRP | S_IROTH)
|
#define romFS_dir_mode (S_IFDIR | S_IRUSR | S_IRGRP | S_IROTH)
|
||||||
#define romFS_file_mode (S_IFREG | S_IRUSR | S_IRGRP | S_IROTH)
|
#define romFS_file_mode (S_IFREG | S_IRUSR | S_IRGRP | S_IROTH)
|
||||||
|
|
||||||
@ -147,8 +147,8 @@ static const devoptab_t romFS_devoptab =
|
|||||||
.dirnext_r = romfs_dirnext,
|
.dirnext_r = romfs_dirnext,
|
||||||
.dirclose_r = romfs_dirclose,
|
.dirclose_r = romfs_dirclose,
|
||||||
// symlinks aren't supported so alias lstat to stat
|
// symlinks aren't supported so alias lstat to stat
|
||||||
.lstat_r = romfs_stat,
|
.lstat_r = romfs_stat,
|
||||||
};
|
};
|
||||||
|
|
||||||
static bool romfs_initialised = false;
|
static bool romfs_initialised = false;
|
||||||
static romfs_mount romfs_mounts[32];
|
static romfs_mount romfs_mounts[32];
|
||||||
@ -162,9 +162,9 @@ static void romfsInitMtime(romfs_mount *mount);
|
|||||||
static void _romfsResetMount(romfs_mount *mount, int32_t id) {
|
static void _romfsResetMount(romfs_mount *mount, int32_t id) {
|
||||||
memset(mount, 0, sizeof(*mount));
|
memset(mount, 0, sizeof(*mount));
|
||||||
memcpy(&mount->device, &romFS_devoptab, sizeof(romFS_devoptab));
|
memcpy(&mount->device, &romFS_devoptab, sizeof(romFS_devoptab));
|
||||||
mount->device.name = mount->name;
|
mount->device.name = mount->name;
|
||||||
mount->device.deviceData = mount;
|
mount->device.deviceData = mount;
|
||||||
mount->id = id;
|
mount->id = id;
|
||||||
DCFlushRange(mount, sizeof(*mount));
|
DCFlushRange(mount, sizeof(*mount));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -183,7 +183,7 @@ static void _romfsInit(void) {
|
|||||||
|
|
||||||
static romfs_mount *romfsFindMount(const char *name) {
|
static romfs_mount *romfsFindMount(const char *name) {
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
uint32_t total = sizeof(romfs_mounts) / sizeof(romfs_mount);
|
uint32_t total = sizeof(romfs_mounts) / sizeof(romfs_mount);
|
||||||
romfs_mount *mount = NULL;
|
romfs_mount *mount = NULL;
|
||||||
|
|
||||||
_romfsInit();
|
_romfsInit();
|
||||||
@ -294,10 +294,10 @@ int32_t romfsMountCommon(const char *name, romfs_mount *mount) {
|
|||||||
goto fail_io;
|
goto fail_io;
|
||||||
}
|
}
|
||||||
|
|
||||||
mount->dirHashTable = NULL;
|
mount->dirHashTable = NULL;
|
||||||
mount->dirTable = NULL;
|
mount->dirTable = NULL;
|
||||||
mount->fileHashTable = NULL;
|
mount->fileHashTable = NULL;
|
||||||
mount->fileTable = NULL;
|
mount->fileTable = NULL;
|
||||||
|
|
||||||
mount->dirHashTable = (uint32_t *) memalign(0x40, mount->header.dirHashTableSize);
|
mount->dirHashTable = (uint32_t *) memalign(0x40, mount->header.dirHashTableSize);
|
||||||
if (!mount->dirHashTable) {
|
if (!mount->dirHashTable) {
|
||||||
@ -341,11 +341,11 @@ int32_t romfsMountCommon(const char *name, romfs_mount *mount) {
|
|||||||
DCFlushRange(mount, sizeof(*mount));
|
DCFlushRange(mount, sizeof(*mount));
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fail_oom:
|
fail_oom:
|
||||||
romfs_mountclose(mount);
|
romfs_mountclose(mount);
|
||||||
return 9;
|
return 9;
|
||||||
|
|
||||||
fail_io:
|
fail_io:
|
||||||
romfs_mountclose(mount);
|
romfs_mountclose(mount);
|
||||||
return 10;
|
return 10;
|
||||||
}
|
}
|
||||||
@ -408,8 +408,8 @@ static bool comparePaths(const uint8_t *name1, const uint8_t *name2, uint32_t na
|
|||||||
|
|
||||||
static int searchForDir(romfs_mount *mount, romfs_dir *parent, const uint8_t *name, uint32_t namelen, romfs_dir **out) {
|
static int searchForDir(romfs_mount *mount, romfs_dir *parent, const uint8_t *name, uint32_t namelen, romfs_dir **out) {
|
||||||
uint64_t parentOff = (uintptr_t) parent - (uintptr_t) mount->dirTable;
|
uint64_t parentOff = (uintptr_t) parent - (uintptr_t) mount->dirTable;
|
||||||
uint32_t hash = calcHash(parentOff, name, namelen, mount->header.dirHashTableSize / 4);
|
uint32_t hash = calcHash(parentOff, name, namelen, mount->header.dirHashTableSize / 4);
|
||||||
romfs_dir *curDir = NULL;
|
romfs_dir *curDir = NULL;
|
||||||
uint32_t curOff;
|
uint32_t curOff;
|
||||||
*out = NULL;
|
*out = NULL;
|
||||||
for (curOff = mount->dirHashTable[hash]; curOff != romFS_none; curOff = curDir->nextHash) {
|
for (curOff = mount->dirHashTable[hash]; curOff != romFS_none; curOff = curDir->nextHash) {
|
||||||
@ -431,8 +431,8 @@ static int searchForDir(romfs_mount *mount, romfs_dir *parent, const uint8_t *na
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int searchForFile(romfs_mount *mount, romfs_dir *parent, const uint8_t *name, uint32_t namelen, romfs_file **out) {
|
static int searchForFile(romfs_mount *mount, romfs_dir *parent, const uint8_t *name, uint32_t namelen, romfs_file **out) {
|
||||||
uint64_t parentOff = (uintptr_t) parent - (uintptr_t) mount->dirTable;
|
uint64_t parentOff = (uintptr_t) parent - (uintptr_t) mount->dirTable;
|
||||||
uint32_t hash = calcHash(parentOff, name, namelen, mount->header.fileHashTableSize / 4);
|
uint32_t hash = calcHash(parentOff, name, namelen, mount->header.fileHashTableSize / 4);
|
||||||
romfs_file *curFile = NULL;
|
romfs_file *curFile = NULL;
|
||||||
uint32_t curOff;
|
uint32_t curOff;
|
||||||
*out = NULL;
|
*out = NULL;
|
||||||
@ -471,7 +471,7 @@ static int navigateToDir(romfs_mount *mount, romfs_dir **ppDir, const char **pPa
|
|||||||
}
|
}
|
||||||
|
|
||||||
while (**pPath) {
|
while (**pPath) {
|
||||||
char *slashPos = strchr(*pPath, '/');
|
char *slashPos = strchr(*pPath, '/');
|
||||||
char *component = __component;
|
char *component = __component;
|
||||||
|
|
||||||
if (slashPos) {
|
if (slashPos) {
|
||||||
@ -485,7 +485,7 @@ static int navigateToDir(romfs_mount *mount, romfs_dir **ppDir, const char **pPa
|
|||||||
|
|
||||||
memcpy(component, *pPath, len);
|
memcpy(component, *pPath, len);
|
||||||
component[len] = 0;
|
component[len] = 0;
|
||||||
*pPath = slashPos + 1;
|
*pPath = slashPos + 1;
|
||||||
} else if (isDir) {
|
} else if (isDir) {
|
||||||
component = (char *) *pPath;
|
component = (char *) *pPath;
|
||||||
*pPath += strlen(component);
|
*pPath += strlen(component);
|
||||||
@ -522,7 +522,7 @@ static off_t dir_size(romfs_dir *dir) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static nlink_t dir_nlink(romfs_mount *mount, romfs_dir *dir) {
|
static nlink_t dir_nlink(romfs_mount *mount, romfs_dir *dir) {
|
||||||
nlink_t count = 2; // one for self, one for parent
|
nlink_t count = 2; // one for self, one for parent
|
||||||
uint32_t offset = dir->childDir;
|
uint32_t offset = dir->childDir;
|
||||||
|
|
||||||
while (offset != romFS_none) {
|
while (offset != romFS_none) {
|
||||||
@ -556,12 +556,12 @@ int romfsGetFileInfoPerPath(const char *romfs, const char *path, romfs_fileInfo
|
|||||||
return -2;
|
return -2;
|
||||||
}
|
}
|
||||||
romfs_dir *curDir = NULL;
|
romfs_dir *curDir = NULL;
|
||||||
int errno2 = navigateToDir(mount, &curDir, &path, false);
|
int errno2 = navigateToDir(mount, &curDir, &path, false);
|
||||||
if (errno2 != 0) {
|
if (errno2 != 0) {
|
||||||
return -3;
|
return -3;
|
||||||
}
|
}
|
||||||
romfs_file *file = NULL;
|
romfs_file *file = NULL;
|
||||||
int err = searchForFile(mount, curDir, (uint8_t *) path, strlen(path), &file);
|
int err = searchForFile(mount, curDir, (uint8_t *) path, strlen(path), &file);
|
||||||
if (err != 0) {
|
if (err != 0) {
|
||||||
return -4;
|
return -4;
|
||||||
}
|
}
|
||||||
@ -586,13 +586,13 @@ int romfs_open(struct _reent *r, void *fileStruct, const char *path, int flags,
|
|||||||
}
|
}
|
||||||
|
|
||||||
romfs_dir *curDir = NULL;
|
romfs_dir *curDir = NULL;
|
||||||
r->_errno = navigateToDir(fileobj->mount, &curDir, &path, false);
|
r->_errno = navigateToDir(fileobj->mount, &curDir, &path, false);
|
||||||
if (r->_errno != 0) {
|
if (r->_errno != 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
romfs_file *file = NULL;
|
romfs_file *file = NULL;
|
||||||
int ret = searchForFile(fileobj->mount, curDir, (uint8_t *) path, strlen(path), &file);
|
int ret = searchForFile(fileobj->mount, curDir, (uint8_t *) path, strlen(path), &file);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
if (ret == ENOENT && (flags & O_CREAT)) {
|
if (ret == ENOENT && (flags & O_CREAT)) {
|
||||||
r->_errno = EROFS;
|
r->_errno = EROFS;
|
||||||
@ -605,9 +605,9 @@ int romfs_open(struct _reent *r, void *fileStruct, const char *path, int flags,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
fileobj->file = file;
|
fileobj->file = file;
|
||||||
fileobj->offset = fileobj->mount->header.fileDataOff + file->dataOff;
|
fileobj->offset = fileobj->mount->header.fileDataOff + file->dataOff;
|
||||||
fileobj->pos = 0;
|
fileobj->pos = 0;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -618,7 +618,7 @@ int romfs_close(struct _reent *r, void *fd) {
|
|||||||
|
|
||||||
ssize_t romfs_read(struct _reent *r, void *fd, char *ptr, size_t len) {
|
ssize_t romfs_read(struct _reent *r, void *fd, char *ptr, size_t len) {
|
||||||
romfs_fileobj *file = (romfs_fileobj *) fd;
|
romfs_fileobj *file = (romfs_fileobj *) fd;
|
||||||
uint64_t endPos = file->pos + len;
|
uint64_t endPos = file->pos + len;
|
||||||
|
|
||||||
/* check if past end-of-file */
|
/* check if past end-of-file */
|
||||||
if (file->pos >= file->file->dataSize) {
|
if (file->pos >= file->file->dataSize) {
|
||||||
@ -669,7 +669,7 @@ off_t romfs_seek(struct _reent *r, void *fd, off_t pos, int dir) {
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* check for overflow */
|
/* check for overflow */
|
||||||
else if (INT64_MAX - pos < start) {
|
else if (INT64_MAX - pos < start) {
|
||||||
r->_errno = EOVERFLOW;
|
r->_errno = EOVERFLOW;
|
||||||
return -1;
|
return -1;
|
||||||
@ -681,23 +681,23 @@ off_t romfs_seek(struct _reent *r, void *fd, off_t pos, int dir) {
|
|||||||
|
|
||||||
static void fillDir(struct stat *st, romfs_mount *mount, romfs_dir *dir) {
|
static void fillDir(struct stat *st, romfs_mount *mount, romfs_dir *dir) {
|
||||||
memset(st, 0, sizeof(*st));
|
memset(st, 0, sizeof(*st));
|
||||||
st->st_ino = dir_inode(mount, dir);
|
st->st_ino = dir_inode(mount, dir);
|
||||||
st->st_mode = romFS_dir_mode;
|
st->st_mode = romFS_dir_mode;
|
||||||
st->st_nlink = dir_nlink(mount, dir);
|
st->st_nlink = dir_nlink(mount, dir);
|
||||||
st->st_size = dir_size(dir);
|
st->st_size = dir_size(dir);
|
||||||
st->st_blksize = 512;
|
st->st_blksize = 512;
|
||||||
st->st_blocks = (st->st_blksize + 511) / 512;
|
st->st_blocks = (st->st_blksize + 511) / 512;
|
||||||
st->st_atime = st->st_mtime = st->st_ctime = mount->mtime;
|
st->st_atime = st->st_mtime = st->st_ctime = mount->mtime;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fillFile(struct stat *st, romfs_mount *mount, romfs_file *file) {
|
static void fillFile(struct stat *st, romfs_mount *mount, romfs_file *file) {
|
||||||
memset(st, 0, sizeof(struct stat));
|
memset(st, 0, sizeof(struct stat));
|
||||||
st->st_ino = file_inode(mount, file);
|
st->st_ino = file_inode(mount, file);
|
||||||
st->st_mode = romFS_file_mode;
|
st->st_mode = romFS_file_mode;
|
||||||
st->st_nlink = 1;
|
st->st_nlink = 1;
|
||||||
st->st_size = (off_t) file->dataSize;
|
st->st_size = (off_t) file->dataSize;
|
||||||
st->st_blksize = 512;
|
st->st_blksize = 512;
|
||||||
st->st_blocks = (st->st_blksize + 511) / 512;
|
st->st_blocks = (st->st_blksize + 511) / 512;
|
||||||
st->st_atime = st->st_mtime = st->st_ctime = mount->mtime;
|
st->st_atime = st->st_mtime = st->st_ctime = mount->mtime;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -710,8 +710,8 @@ int romfs_fstat(struct _reent *r, void *fd, struct stat *st) {
|
|||||||
|
|
||||||
int romfs_stat(struct _reent *r, const char *path, struct stat *st) {
|
int romfs_stat(struct _reent *r, const char *path, struct stat *st) {
|
||||||
romfs_mount *mount = (romfs_mount *) r->deviceData;
|
romfs_mount *mount = (romfs_mount *) r->deviceData;
|
||||||
romfs_dir *curDir = NULL;
|
romfs_dir *curDir = NULL;
|
||||||
r->_errno = navigateToDir(mount, &curDir, &path, false);
|
r->_errno = navigateToDir(mount, &curDir, &path, false);
|
||||||
if (r->_errno != 0) {
|
if (r->_errno != 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -722,8 +722,8 @@ int romfs_stat(struct _reent *r, const char *path, struct stat *st) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
romfs_dir *dir = NULL;
|
romfs_dir *dir = NULL;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
ret = searchForDir(mount, curDir, (uint8_t *) path, strlen(path), &dir);
|
ret = searchForDir(mount, curDir, (uint8_t *) path, strlen(path), &dir);
|
||||||
if (ret != 0 && ret != ENOENT) {
|
if (ret != 0 && ret != ENOENT) {
|
||||||
r->_errno = ret;
|
r->_errno = ret;
|
||||||
return -1;
|
return -1;
|
||||||
@ -735,7 +735,7 @@ int romfs_stat(struct _reent *r, const char *path, struct stat *st) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
romfs_file *file = NULL;
|
romfs_file *file = NULL;
|
||||||
ret = searchForFile(mount, curDir, (uint8_t *) path, strlen(path), &file);
|
ret = searchForFile(mount, curDir, (uint8_t *) path, strlen(path), &file);
|
||||||
if (ret != 0 && ret != ENOENT) {
|
if (ret != 0 && ret != ENOENT) {
|
||||||
r->_errno = ret;
|
r->_errno = ret;
|
||||||
return -1;
|
return -1;
|
||||||
@ -751,8 +751,8 @@ int romfs_stat(struct _reent *r, const char *path, struct stat *st) {
|
|||||||
|
|
||||||
int romfs_chdir(struct _reent *r, const char *path) {
|
int romfs_chdir(struct _reent *r, const char *path) {
|
||||||
romfs_mount *mount = (romfs_mount *) r->deviceData;
|
romfs_mount *mount = (romfs_mount *) r->deviceData;
|
||||||
romfs_dir *curDir = NULL;
|
romfs_dir *curDir = NULL;
|
||||||
r->_errno = navigateToDir(mount, &curDir, &path, true);
|
r->_errno = navigateToDir(mount, &curDir, &path, true);
|
||||||
if (r->_errno != 0) {
|
if (r->_errno != 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -763,17 +763,17 @@ int romfs_chdir(struct _reent *r, const char *path) {
|
|||||||
|
|
||||||
DIR_ITER *romfs_diropen(struct _reent *r, DIR_ITER *dirState, const char *path) {
|
DIR_ITER *romfs_diropen(struct _reent *r, DIR_ITER *dirState, const char *path) {
|
||||||
romfs_diriter *iter = (romfs_diriter *) (dirState->dirStruct);
|
romfs_diriter *iter = (romfs_diriter *) (dirState->dirStruct);
|
||||||
romfs_dir *curDir = NULL;
|
romfs_dir *curDir = NULL;
|
||||||
iter->mount = (romfs_mount *) r->deviceData;
|
iter->mount = (romfs_mount *) r->deviceData;
|
||||||
|
|
||||||
r->_errno = navigateToDir(iter->mount, &curDir, &path, true);
|
r->_errno = navigateToDir(iter->mount, &curDir, &path, true);
|
||||||
if (r->_errno != 0) {
|
if (r->_errno != 0) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
iter->dir = curDir;
|
iter->dir = curDir;
|
||||||
iter->state = 0;
|
iter->state = 0;
|
||||||
iter->childDir = curDir->childDir;
|
iter->childDir = curDir->childDir;
|
||||||
iter->childFile = curDir->childFile;
|
iter->childFile = curDir->childFile;
|
||||||
|
|
||||||
return dirState;
|
return dirState;
|
||||||
@ -782,8 +782,8 @@ DIR_ITER *romfs_diropen(struct _reent *r, DIR_ITER *dirState, const char *path)
|
|||||||
int romfs_dirreset(struct _reent *r, DIR_ITER *dirState) {
|
int romfs_dirreset(struct _reent *r, DIR_ITER *dirState) {
|
||||||
romfs_diriter *iter = (romfs_diriter *) (dirState->dirStruct);
|
romfs_diriter *iter = (romfs_diriter *) (dirState->dirStruct);
|
||||||
|
|
||||||
iter->state = 0;
|
iter->state = 0;
|
||||||
iter->childDir = iter->dir->childDir;
|
iter->childDir = iter->dir->childDir;
|
||||||
iter->childFile = iter->dir->childFile;
|
iter->childFile = iter->dir->childFile;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -795,7 +795,7 @@ int romfs_dirnext(struct _reent *r, DIR_ITER *dirState, char *filename, struct s
|
|||||||
if (iter->state == 0) {
|
if (iter->state == 0) {
|
||||||
/* '.' entry */
|
/* '.' entry */
|
||||||
memset(filestat, 0, sizeof(*filestat));
|
memset(filestat, 0, sizeof(*filestat));
|
||||||
filestat->st_ino = dir_inode(iter->mount, iter->dir);
|
filestat->st_ino = dir_inode(iter->mount, iter->dir);
|
||||||
filestat->st_mode = romFS_dir_mode;
|
filestat->st_mode = romFS_dir_mode;
|
||||||
|
|
||||||
strcpy(filename, ".");
|
strcpy(filename, ".");
|
||||||
@ -810,7 +810,7 @@ int romfs_dirnext(struct _reent *r, DIR_ITER *dirState, char *filename, struct s
|
|||||||
}
|
}
|
||||||
|
|
||||||
memset(filestat, 0, sizeof(*filestat));
|
memset(filestat, 0, sizeof(*filestat));
|
||||||
filestat->st_ino = dir_inode(iter->mount, dir);
|
filestat->st_ino = dir_inode(iter->mount, dir);
|
||||||
filestat->st_mode = romFS_dir_mode;
|
filestat->st_mode = romFS_dir_mode;
|
||||||
|
|
||||||
strcpy(filename, "..");
|
strcpy(filename, "..");
|
||||||
@ -828,7 +828,7 @@ int romfs_dirnext(struct _reent *r, DIR_ITER *dirState, char *filename, struct s
|
|||||||
iter->childDir = dir->sibling;
|
iter->childDir = dir->sibling;
|
||||||
|
|
||||||
memset(filestat, 0, sizeof(*filestat));
|
memset(filestat, 0, sizeof(*filestat));
|
||||||
filestat->st_ino = dir_inode(iter->mount, dir);
|
filestat->st_ino = dir_inode(iter->mount, dir);
|
||||||
filestat->st_mode = romFS_dir_mode;
|
filestat->st_mode = romFS_dir_mode;
|
||||||
|
|
||||||
memset(filename, 0, NAME_MAX);
|
memset(filename, 0, NAME_MAX);
|
||||||
@ -851,7 +851,7 @@ int romfs_dirnext(struct _reent *r, DIR_ITER *dirState, char *filename, struct s
|
|||||||
iter->childFile = file->sibling;
|
iter->childFile = file->sibling;
|
||||||
|
|
||||||
memset(filestat, 0, sizeof(*filestat));
|
memset(filestat, 0, sizeof(*filestat));
|
||||||
filestat->st_ino = file_inode(iter->mount, file);
|
filestat->st_ino = file_inode(iter->mount, file);
|
||||||
filestat->st_mode = romFS_file_mode;
|
filestat->st_mode = romFS_file_mode;
|
||||||
|
|
||||||
memset(filename, 0, NAME_MAX);
|
memset(filename, 0, NAME_MAX);
|
||||||
|
Loading…
Reference in New Issue
Block a user