Files
vitasdk-odin/Io/types.odin
T

145 lines
5.2 KiB
Odin

package io
import "core:c"
import sce "../common"
SceIoDevInfo :: struct {
max_size: sce.Off,
free_size: sce.Off,
cluster_size: sce.Size,
unk: rawptr,
}
when size_of(rawptr) == 4 {
#assert(size_of(SceIoDevInfo) == 0x18)
}
/* Note: Not all of these sceIoOpen() flags are not compatible with the
open() flags found in sys/unistd.h. */
SceIoMode :: enum c.int {
O_RDONLY = 0x0001, //!< Read-only
O_WRONLY = 0x0002, //!< Write-only
O_RDWR = (O_RDONLY | O_WRONLY), //!< Read/Write
O_NBLOCK = 0x0004, //!< Non blocking
O_DIROPEN = 0x0008, //!< Internal use for ::sceIoDopen
O_RDLOCK = 0x0010, //!< Read locked (non-shared)
O_WRLOCK = 0x0020, //!< Write locked (non-shared)
O_APPEND = 0x0100, //!< Append
O_CREAT = 0x0200, //!< Create
O_TRUNC = 0x0400, //!< Truncate
O_EXCL = 0x0800, //!< Exclusive create
O_SCAN = 0x1000, //!< Scan type
O_RCOM = 0x2000, //!< Remote command entry
O_NOBUF = 0x4000, //!< Number device buffer
O_NOWAIT = 0x8000, //!< Asynchronous I/O
O_FDEXCL = 0x01000000, //!< Exclusive access
O_PWLOCK = 0x02000000, //!< Power control lock
O_FGAMEDATA = 0x40000000 //!< Gamedata access
}
SceIoSeekMode :: enum c.int {
SET, //!< Starts from the begin of the file
CUR, //!< Starts from current position
END //!< Starts from the end of the file
}
SceIoDevType :: enum c.int {
NULL = 0x00, //!< Dummy device
CHAR = 0x01, //!< Character device
BLOCK = 0x04, //!< Block device
FS = 0x10, //!< File system device
ALIAS = 0x20, //!< Alias name
MOUNTPT = 0x40 //!< Mount point
}
/**
* Access modes for st_mode in ::SceIoStat.
*
* @note
* System always requires RW access.
* For safe homebrew system software will force system permission field to RW.
* For unsafe homebrew, you need to set it yourself `( mode | SCE_S_IWSYS | SCE_S_IRSYS)`
*
*/
SceIoAccessMode :: enum c.int {
S_IXUSR = 000100, //!< User execute permission
S_IWUSR = 000200, //!< User write permission
S_IRUSR = 000400, //!< User read permission
S_IRWXU = 000700, //!< User access rights mask
S_IXGRP = 000000, //!< Group execute permission. Ignored and reset to 0 by system
S_IWGRP = 000000, //!< Group write permission. Ignored and reset to 0 by system
S_IRGRP = 000000, //!< Group read permission. Ignored and reset to 0 by system
S_IRWXG = 000000, //!< Group access rights mask. Ignored and reset to 0 by system
S_IXSYS = 000001, //!< System execute permission
S_IWSYS = 000002, //!< System write permission
S_IRSYS = 000004, //!< System read permission
S_IRWXS = 000007, //!< System access rights mask
// Deprecated
S_IXOTH = 000001, //!< Others execute permission. Deprecated, use ::SCE_S_IXSYS
// Deprecated
S_IWOTH = 000002, //!< Others write permission. Deprecated, use ::SCE_S_IXSYS
// Deprecated
S_IROTH = 000004, //!< Others read permission. Deprecated, use ::SCE_S_IXSYS
// Deprecated
S_IRWXO = 000007, //!< Others access rights mask. Deprecated, use ::SCE_S_IRWXS
// Deprecated
S_ISVTX = 000000, //!< Sticky. Deprecated
// Deprecated
S_ISGID = 000000, //!< Set GID. Deprecated
// Deprecated
S_ISUID = 000000, //!< Set UID. Deprecated
S_IFDIR = 0010000, //!< Directory
S_IFREG = 0020000, //!< Regular file
S_IFLNK = 0040000, //!< Symbolic link
S_IFMT = 0170000, //!< Format bits mask
}
/** File modes, used for the st_attr parameter in ::SceIoStat. */
SceIoFileMode :: enum c.int {
SO_IXOTH = 0x0001, //!< Hidden execute permission
SO_IWOTH = 0x0002, //!< Hidden write permission
SO_IROTH = 0x0004, //!< Hidden read permission
SO_IFLNK = 0x0008, //!< Symbolic link
SO_IFDIR = 0x0010, //!< Directory
SO_IFREG = 0x0020, //!< Regular file
SO_IFMT = 0x0038, //!< Format mask
}
/** Structure to hold the status information about a file */
SceIoStat :: struct {
st_mode: sce.Mode, //!< One or more ::SceIoAccessMode
st_attr: c.uint, //!< One or more ::SceIoFileMode
st_size: sce.Off, //!< Size of the file in bytes
st_ctime: sce.DateTime, //!< Creation time
st_atime: sce.DateTime, //!< Last access time
st_mtime: sce.DateTime, //!< Last modification time
st_private: [6]c.uint, //!< Device-specific data
}
#assert(size_of(SceIoStat) == 0x58)
/** Defines for `sceIoChstat` and `sceIoChstatByFd` **/
SCE_CST_MODE :: 0x0001
SCE_CST_SIZE :: 0x0004
SCE_CST_CT :: 0x0008
SCE_CST_AT :: 0x0010
SCE_CST_MT :: 0x0020
/** Describes a single directory entry */
SceIoDirent :: struct {
d_stat: SceIoStat, //!< File status
d_name: [256]c.char, //!< File name
d_private: rawptr, //!< Device-specific data
dummy: c.int, //!< Dummy data
}
when size_of(rawptr) == 4 {
#assert(size_of(SceIoDirent) == 0x160)
}