mirror of
https://github.com/wiidev/usbloadergx.git
synced 2024-11-16 00:15:08 +01:00
0f17471b27
*Added sources of the custom libs to the branches *Fixed crash when switching from list layout to grid/carousel layout *Removed 1:1 copy option because its meaningless and almost the same as installing all partitions *Fixed install partition selection. This option needs a reset. Go to settings and reselect your option for this. *Fixed schinese and tchinese language modes (filename bugs. has to be schinese.lang and tchinese.lang like on SVN) *Fixed bug in sound buffer circle *Fixed incorrect behaviour of x-flip when selecting system like (thx Cyan for the patch) *Accept ios revision 65535 for Waninkokos IOSes (thx to PPSainity for pointing it out) *Merged the new theming style branch into trunk. Just as a reminder: ALL old themes will not work until the themers did port it to the new style! *Removed old theme style completely Theme example: The example file of the theme is the Default.them file. It can be found in the SVN trunk. Change in loading of themes: When selecting a theme now a list of all .them files in a folder is displayed. The image folder of that theme has to be in the same folder as the .them file. The image path is defined in the head of the .them file in the line with "Image-Folder: Example\n".
179 lines
7.5 KiB
C
179 lines
7.5 KiB
C
/**
|
|
* ntfsinternal.h - Internal support routines for NTFS-based devices.
|
|
*
|
|
* Copyright (c) 2009 Rhys "Shareese" Koedijk
|
|
* Copyright (c) 2006 Michael "Chishm" Chisholm
|
|
*
|
|
* This program/include file is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License as published
|
|
* by the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program/include file is distributed in the hope that it will be
|
|
* useful, but WITHOUT ANY WARRANTY; without even the implied warranty
|
|
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*/
|
|
|
|
#ifndef _NTFSINTERNAL_H
|
|
#define _NTFSINTERNAL_H
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
#include "config.h"
|
|
#endif
|
|
|
|
#include "types.h"
|
|
#include "compat.h"
|
|
#include "logging.h"
|
|
#include "layout.h"
|
|
#include "device.h"
|
|
#include "volume.h"
|
|
#include "dir.h"
|
|
#include "inode.h"
|
|
#include "attrib.h"
|
|
#include "reparse.h"
|
|
#include "security.h"
|
|
#include "efs.h"
|
|
#include "unistr.h"
|
|
|
|
#include <gccore.h>
|
|
#include <ogc/disc_io.h>
|
|
#include <sys/iosupport.h>
|
|
|
|
#define NTFS_MOUNT_PREFIX "ntfs" /* Device name prefix to use when auto-mounting */
|
|
#define NTFS_MAX_PARTITIONS 32 /* Maximum number of partitions that can be found */
|
|
#define NTFS_MAX_MOUNTS 10 /* Maximum number of mounts available at one time */
|
|
#define NTFS_MAX_SYMLINK_DEPTH 10 /* Maximum search depth when resolving symbolic links */
|
|
|
|
#define NTFS_OEM_ID cpu_to_le64(0x202020205346544eULL) /* "NTFS " */
|
|
|
|
#define MBR_SIGNATURE cpu_to_le16(0xAA55)
|
|
#define EBR_SIGNATURE cpu_to_le16(0xAA55)
|
|
|
|
#define PARTITION_STATUS_NONBOOTABLE 0x00 /* Non-bootable */
|
|
#define PARTITION_STATUS_BOOTABLE 0x80 /* Bootable (active) */
|
|
|
|
#define PARTITION_TYPE_EMPTY 0x00 /* Empty */
|
|
#define PARTITION_TYPE_DOS33_EXTENDED 0x05 /* DOS 3.3+ extended partition */
|
|
#define PARTITION_TYPE_NTFS 0x07 /* Windows NT NTFS */
|
|
#define PARTITION_TYPE_WIN95_EXTENDED 0x0F /* Windows 95 extended partition */
|
|
|
|
/* Forward declarations */
|
|
struct _ntfs_file_state;
|
|
struct _ntfs_dir_state;
|
|
|
|
/**
|
|
* PRIMARY_PARTITION - Block device partition record
|
|
*/
|
|
typedef struct _PARTITION_RECORD {
|
|
u8 status; /* Partition status; see above */
|
|
u8 chs_start[3]; /* Cylinder-head-sector address to first block of partition */
|
|
u8 type; /* Partition type; see above */
|
|
u8 chs_end[3]; /* Cylinder-head-sector address to last block of partition */
|
|
u32 lba_start; /* Local block address to first sector of partition */
|
|
u32 block_count; /* Number of blocks in partition */
|
|
} __attribute__((__packed__)) PARTITION_RECORD;
|
|
|
|
/**
|
|
* MASTER_BOOT_RECORD - Block device master boot record
|
|
*/
|
|
typedef struct _MASTER_BOOT_RECORD {
|
|
u8 code_area[446]; /* Code area; normally empty */
|
|
PARTITION_RECORD partitions[4]; /* 4 primary partitions */
|
|
u16 signature; /* MBR signature; 0xAA55 */
|
|
} __attribute__((__packed__)) MASTER_BOOT_RECORD;
|
|
|
|
/**
|
|
* EXTENDED_PARTITION - Block device extended boot record
|
|
*/
|
|
typedef struct _EXTENDED_BOOT_RECORD {
|
|
u8 code_area[446]; /* Code area; normally empty */
|
|
PARTITION_RECORD partition; /* Primary partition */
|
|
PARTITION_RECORD next_ebr; /* Next extended boot record in the chain */
|
|
u8 reserved[32]; /* Normally empty */
|
|
u16 signature; /* EBR signature; 0xAA55 */
|
|
} __attribute__((__packed__)) EXTENDED_BOOT_RECORD;
|
|
|
|
/**
|
|
* INTERFACE_ID - Disc interface identifier
|
|
*/
|
|
typedef struct _INTERFACE_ID {
|
|
const char *name; /* Interface name */
|
|
const DISC_INTERFACE *interface; /* Disc interface */
|
|
} INTERFACE_ID;
|
|
|
|
/**
|
|
* ntfs_atime_t - File access time update strategies
|
|
*/
|
|
typedef enum {
|
|
ATIME_ENABLED, /* Update access times */
|
|
ATIME_DISABLED /* Don't update access times */
|
|
} ntfs_atime_t;
|
|
|
|
/**
|
|
* ntfs_vd - NTFS volume descriptor
|
|
*/
|
|
typedef struct _ntfs_vd {
|
|
struct ntfs_device *dev; /* NTFS device handle */
|
|
ntfs_volume *vol; /* NTFS volume handle */
|
|
mutex_t lock; /* Volume lock mutex */
|
|
s64 id; /* Filesystem id */
|
|
u32 flags; /* Mount flags */
|
|
char name[128]; /* Volume name (cached) */
|
|
u16 uid; /* User id for entry creation */
|
|
u16 gid; /* Group id for entry creation */
|
|
u16 fmask; /* Unix style permission mask for file creation */
|
|
u16 dmask; /* Unix style permission mask for directory creation */
|
|
ntfs_atime_t atime; /* Entry access time update strategy */
|
|
bool showHiddenFiles; /* If true, show hidden files when enumerating directories */
|
|
bool showSystemFiles; /* If true, show system files when enumerating directories */
|
|
ntfs_inode *cwd_ni; /* Current directory */
|
|
struct _ntfs_dir_state *firstOpenDir; /* The start of a FILO linked list of currently opened directories */
|
|
struct _ntfs_file_state *firstOpenFile; /* The start of a FILO linked list of currently opened files */
|
|
u16 openDirCount; /* The total number of directories currently open in this volume */
|
|
u16 openFileCount; /* The total number of files currently open in this volume */
|
|
} ntfs_vd;
|
|
|
|
/* Lock volume */
|
|
static inline void ntfsLock (ntfs_vd *vd)
|
|
{
|
|
LWP_MutexLock(vd->lock);
|
|
}
|
|
|
|
/* Unlock volume */
|
|
static inline void ntfsUnlock (ntfs_vd *vd)
|
|
{
|
|
LWP_MutexUnlock(vd->lock);
|
|
}
|
|
|
|
/* Gekko device related routines */
|
|
int ntfsAddDevice (const char *name, void *deviceData);
|
|
void ntfsRemoveDevice (const char *path);
|
|
const devoptab_t *ntfsGetDevice (const char *path, bool useDefaultDevice);
|
|
const devoptab_t *ntfsGetDevOpTab (void);
|
|
const INTERFACE_ID* ntfsGetDiscInterfaces (void);
|
|
|
|
/* Miscellaneous helper/support routines */
|
|
int ntfsInitVolume (ntfs_vd *vd);
|
|
void ntfsDeinitVolume (ntfs_vd *vd);
|
|
ntfs_vd *ntfsGetVolume (const char *path);
|
|
ntfs_inode *ntfsOpenEntry (ntfs_vd *vd, const char *path);
|
|
ntfs_inode *ntfsParseEntry (ntfs_vd *vd, const char *path, int reparseLevel);
|
|
void ntfsCloseEntry (ntfs_vd *vd, ntfs_inode *ni);
|
|
ntfs_inode *ntfsCreate (ntfs_vd *vd, const char *path, mode_t type, const char *target);
|
|
int ntfsLink (ntfs_vd *vd, const char *old_path, const char *new_path);
|
|
int ntfsUnlink (ntfs_vd *vd, const char *path);
|
|
int ntfsSync (ntfs_vd *vd, ntfs_inode *ni);
|
|
int ntfsStat (ntfs_vd *vd, ntfs_inode *ni, struct stat *st);
|
|
void ntfsUpdateTimes (ntfs_vd *vd, ntfs_inode *ni, ntfs_time_update_flags mask);
|
|
|
|
const char *ntfsRealPath (const char *path);
|
|
int ntfsUnicodeToLocal (const ntfschar *ins, const int ins_len, char **outs, int outs_len);
|
|
int ntfsLocalToUnicode (const char *ins, ntfschar **outs);
|
|
|
|
#endif /* _NTFSINTERNAL_H */
|