NAND (SDK): Difference between revisions
Jump to navigation
Jump to search
Hallowizer (talk | contribs) →Public functions: Added the rest of the funcctions present in the nand boot program |
Hallowizer (talk | contribs) Moved /shared2/test2/nanderr.log conversion table here |
||
| Line 47: | Line 47: | ||
| <code>int NANDCloseAsync(struct File *file, void (*callback)(int, void *), void *userData)</code> | | <code>int NANDCloseAsync(struct File *file, void (*callback)(int, void *), void *userData)</code> | ||
| Calls IOS_CloseAsync and marks <code>file</code> as closed. Also sets <code>unknownAsync</code> to 7, although it is not known what this field actually does. | | Calls IOS_CloseAsync and marks <code>file</code> as closed. Also sets <code>unknownAsync</code> to 7, although it is not known what this field actually does. | ||
|} | |||
== Error codes == | |||
Most error codes are converted from the errors returned by [[IPC (SDK)|IPC]], which usually come directly from [[IOS]] | |||
{| class="wikitable sortable" | |||
! Error | |||
! IPC error(s) | |||
! Description | |||
|- | |||
| 0 | |||
| 0 | |||
| No error | |||
|- | |||
| -1 | |||
| -1, -102, -105 | |||
| Operation not permitted? Returned for EACCESS and EEXIST | |||
|- | |||
| -2 | |||
| -22, -114 | |||
| Memory error? Returned for ENOMEM and some EIO | |||
|- | |||
| -3 | |||
| -118 | |||
| Try again later? Returned for certain ENAMETOOLONG errors | |||
|- | |||
| -5 | |||
| -12 | |||
| Returned for some EIO | |||
|- | |||
| -6 | |||
| -2 | |||
| Returned for some EEXIST | |||
|- | |||
| -8 | |||
| -4, -101 | |||
| Returned for some EINVAL | |||
|- | |||
| -9 | |||
| -108 | |||
| Returned if memory is full | |||
|- | |||
| -10 | |||
| -109 | |||
| Returned for some ENFILE | |||
|- | |||
| -11 | |||
| -107 | |||
| Returned for some ENFILE | |||
|- | |||
| -12 | |||
| -6, -106 | |||
| Returned for ENOENT | |||
|- | |||
| -13 | |||
| -115 | |||
| Returned for ENOTEMPTY | |||
|- | |||
| -14 | |||
| -111 | |||
| Returned if the FD is already open | |||
|- | |||
| -15 | |||
| -116 | |||
| Returned for some ENAMETOOLONG | |||
|- | |||
| -16 | |||
| -110 | |||
| Returned for some ENAMETOOLONG | |||
|- | |||
| -40 | |||
| -103 | |||
| Returned for some EIO | |||
|- | |||
| -64 | |||
| -3, -5, -7, -9, -10, -11, -13, -14, -15, -16, -17, -18, -19, -20, -21, -23, -104, -117 | |||
| Returned for unrecognized error code? None of these error codes are known by the homebrew scene. | |||
|- | |||
| -128 | |||
| -119 | |||
| Returned for fatal error | |||
|} | |} | ||
Revision as of 21:49, 26 January 2022
NAND is an SDK library that provides filesystem functions.
Public functions
| Signature | Description |
|---|---|
int NANDPrivateCreate(char *path, int permissions, int attributes)
|
Creates a file. path can be a relative path, relative to the data directory of the active title. permissions is a single number that is put through a function to split it into permissions for owner/group/other. attributes is fed directly to /dev/fs.
|
int NANDPrivateCreateAsync(char *path, int permissions, int attributes, void (*callback)(int, void *), void *userData)
|
Same as NANDPrivateCreate, but done asynchronously
|
int NANDDelete(char *path)
|
Deletes a file or directory |
int NANDRead(struct File *file, char *data, int len)
|
Equivalent to IOS_Read, but takes a struct File instead of an fd.
|
int NANDReadAsync(struct File *file, char *data, int len, void (*callback)(int, void *), void *userData)
|
Asynchronous version of NANDRead
|
int NANDWrite(struct File *file, char *data, int len)
|
Equivalent to IOS_Write, but takes a struct File instead of an fd.
|
int NANDWriteAsync(struct File *file, char *data, int len, void (*callback)(int, void *), void *userData)
|
Asynchronous version of NANDWrite
|
int NANDSeekAsync(struct File *file, int offset, SeekMode mode, void (*callback)(int, void *), void *userData)
|
Seeks a file asynchronously using IOS_Seek |
int NANDPrivateCreateDirAsync(char *path, int permissions, int attributes, void *userData)
|
Same as NANDPrivateCreateAsync, but creates a directory
|
int NANDOpen(char *path, struct File *file, int mode)
|
Opens the file with IOS_Open and initializes file. path can be a relative path, relative to the current title's data directory. Returns error -102 when trying to open any path starting with /shared2.
|
int NANDPrivateOpen(char *path, struct File *file, int mode)
|
Same as NANDOpen, except files in /shared2 are allowed.
|
int NANDPrivateOpenAsync(char *path, struct File *file, int mode, void (*callback)(int, void *), void *userData)
|
Same as NANDOpenAsync, without the /shared2 check.
|
int NANDClose(struct File *file)
|
Calls IOS_Close and marks file as closed.
|
int NANDCloseAsync(struct File *file, void (*callback)(int, void *), void *userData)
|
Calls IOS_CloseAsync and marks file as closed. Also sets unknownAsync to 7, although it is not known what this field actually does.
|
Error codes
Most error codes are converted from the errors returned by IPC, which usually come directly from IOS
| Error | IPC error(s) | Description |
|---|---|---|
| 0 | 0 | No error |
| -1 | -1, -102, -105 | Operation not permitted? Returned for EACCESS and EEXIST |
| -2 | -22, -114 | Memory error? Returned for ENOMEM and some EIO |
| -3 | -118 | Try again later? Returned for certain ENAMETOOLONG errors |
| -5 | -12 | Returned for some EIO |
| -6 | -2 | Returned for some EEXIST |
| -8 | -4, -101 | Returned for some EINVAL |
| -9 | -108 | Returned if memory is full |
| -10 | -109 | Returned for some ENFILE |
| -11 | -107 | Returned for some ENFILE |
| -12 | -6, -106 | Returned for ENOENT |
| -13 | -115 | Returned for ENOTEMPTY |
| -14 | -111 | Returned if the FD is already open |
| -15 | -116 | Returned for some ENAMETOOLONG |
| -16 | -110 | Returned for some ENAMETOOLONG |
| -40 | -103 | Returned for some EIO |
| -64 | -3, -5, -7, -9, -10, -11, -13, -14, -15, -16, -17, -18, -19, -20, -21, -23, -104, -117 | Returned for unrecognized error code? None of these error codes are known by the homebrew scene. |
| -128 | -119 | Returned for fatal error |
File struct
struct File {
s32 fd;
u8 unknown[0x85];
u8 unknownAsync; // Set to 2 if the file is opened asynchronously, unset otherwise. Set to 7 if closed asynchronously.
u8 status; // 1 = open, 2 = closed
}