http://code.google.com/p/ftpii/source/detail?r=300
Modified:
/trunk
/trunk/Makefile
/trunk/README.txt
/trunk/source/fs.c
/trunk/source/fs.h
/trunk/source/ftp.c
/trunk/source/ftpii.c
=======================================
--- /trunk/Makefile Sun Dec 20 07:24:37 2009
+++ /trunk/Makefile Fri Feb 26 22:31:01 2010
@@ -11,7 +11,7 @@
BUILD = build
CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE)
-LDFLAGS = -L$(LIBOGC_LIB) -lotp -lisfs -lnandimg -lfst -lwod -liso -ldi
-lwiiuse -lbte -lfat -logc -lm -g $(MACHDEP) -Wl,-Map,$(notdir
$@).map,--section-start,.init=0x80a00000
+LDFLAGS = -L$(LIBOGC_LIB) -lntfs -lseeprom -lotp -lisfs -lnandimg -lfst
-lwod -liso -ldi -lwiiuse -lbte -lfat -logc -lm -g $(MACHDEP)
-Wl,-Map,$(notdir $@).map,--section-start,.init=0x80a00000
PRELOADER_LDFLAGS = -L$(LIBOGC_LIB) -logc -g $(MACHDEP) -Wl,-Map,$(notdir
$@).map
ifneq ($(BUILD),$(notdir $(CURDIR)))
=======================================
--- /trunk/README.txt Sun Dec 20 07:39:21 2009
+++ /trunk/README.txt Fri Feb 26 22:31:01 2010
@@ -33,6 +33,10 @@
For subversion changes since 0.0.6, see
http://code.google.com/p/ftpii/source/list
+20100227 0.0.21 Added NTFS filesystem support (libntfs). (thanks
shareese/rodries/dimok!)
+ Added SEEPROM filesystem support at /seeprom (libseeprom).
+ Fixed active-mode transfers. (thanks closms!)
+ Built with devkitPPC release 19, libogc r3938, libfat
r3938.
20091221 0.0.20 Make release ZIP structure compatible with HBC's new
wiiload.
Attempt to reinitialise network after failure.
Added OTP filesystem support at /otp (libotp).
=======================================
--- /trunk/source/fs.c Sun Dec 20 07:24:37 2009
+++ /trunk/source/fs.c Fri Feb 26 22:31:01 2010
@@ -26,7 +26,9 @@
#include <fst/fst.h>
#include <isfs/isfs.h>
#include <iso/iso.h>
+#include <malloc.h>
#include <nandimg/nandimg.h>
+#include <ntfs.h>
#include <ogc/lwp_watchdog.h>
#include <ogc/mutex.h>
#include <ogc/system.h>
@@ -34,6 +36,7 @@
#include <otp/otp.h>
#include <sdcard/gcsd.h>
#include <sdcard/wiisd_io.h>
+#include <seeprom/seeprom.h>
#include <stdio.h>
#include <string.h>
#include <sys/dir.h>
@@ -57,20 +60,22 @@
{ "Wii disc filesystem", "/fst", "fst", "fst:/", false, false, NULL },
{ "NAND images", "/nand", "nand", "nand:/", false, false, NULL },
{ "NAND filesystem", "/isfs", "isfs", "isfs:/", false, false, NULL },
- { "OTP filesystem", "/otp", "otp", "otp:/", false, false, NULL }
+ { "OTP filesystem", "/otp", "otp", "otp:/", false, false, NULL },
+ { "SEEPROM filesystem", "/seeprom", "seeprom", "seeprom:/", false,
false, NULL }
};
const u32 MAX_VIRTUAL_PARTITIONS = (sizeof(VIRTUAL_PARTITIONS) /
sizeof(VIRTUAL_PARTITION));
-VIRTUAL_PARTITION *PA_GCSDA = VIRTUAL_PARTITIONS + 0;
-VIRTUAL_PARTITION *PA_GCSDB = VIRTUAL_PARTITIONS + 1;
-VIRTUAL_PARTITION *PA_SD = VIRTUAL_PARTITIONS + 2;
-VIRTUAL_PARTITION *PA_USB = VIRTUAL_PARTITIONS + 3;
-VIRTUAL_PARTITION *PA_DVD = VIRTUAL_PARTITIONS + 4;
-VIRTUAL_PARTITION *PA_WOD = VIRTUAL_PARTITIONS + 5;
-VIRTUAL_PARTITION *PA_FST = VIRTUAL_PARTITIONS + 6;
-VIRTUAL_PARTITION *PA_NAND = VIRTUAL_PARTITIONS + 7;
-VIRTUAL_PARTITION *PA_ISFS = VIRTUAL_PARTITIONS + 8;
-VIRTUAL_PARTITION *PA_OTP = VIRTUAL_PARTITIONS + 9;
+VIRTUAL_PARTITION *PA_GCSDA = VIRTUAL_PARTITIONS + 0;
+VIRTUAL_PARTITION *PA_GCSDB = VIRTUAL_PARTITIONS + 1;
+VIRTUAL_PARTITION *PA_SD = VIRTUAL_PARTITIONS + 2;
+VIRTUAL_PARTITION *PA_USB = VIRTUAL_PARTITIONS + 3;
+VIRTUAL_PARTITION *PA_DVD = VIRTUAL_PARTITIONS + 4;
+VIRTUAL_PARTITION *PA_WOD = VIRTUAL_PARTITIONS + 5;
+VIRTUAL_PARTITION *PA_FST = VIRTUAL_PARTITIONS + 6;
+VIRTUAL_PARTITION *PA_NAND = VIRTUAL_PARTITIONS + 7;
+VIRTUAL_PARTITION *PA_ISFS = VIRTUAL_PARTITIONS + 8;
+VIRTUAL_PARTITION *PA_OTP = VIRTUAL_PARTITIONS + 9;
+VIRTUAL_PARTITION *PA_SEEPROM = VIRTUAL_PARTITIONS + 10;
static VIRTUAL_PARTITION *to_virtual_partition(const char *virtual_prefix)
{
u32 i;
@@ -120,14 +125,6 @@
}
return already_inserted != partition->inserted;
}
-
-static bool fat_initialised = false;
-
-static bool initialise_fat() {
- if (fat_initialised) return true;
- if (fatInit(CACHE_PAGES, false)) fat_initialised = true;
- return fat_initialised;
-}
typedef enum { MOUNTSTATE_START, MOUNTSTATE_SELECTDEVICE,
MOUNTSTATE_WAITFORDEVICE } mountstate_t;
static mountstate_t mountstate = MOUNTSTATE_START;
@@ -154,11 +151,16 @@
} else if (is_fat(partition)) {
bool retry_gecko = true;
gecko_retry:
- if (partition->disc->shutdown() & partition->disc->startup()) {
- if (!fat_initialised) {
- if (initialise_fat()) success = mounted(partition);
- } else if (fatMount(partition->mount_point, partition->disc,
0, CACHE_PAGES, CACHE_SECTORS_PER_PAGE)) {
+ if ((partition == PA_USB || partition->disc->shutdown()) &
partition->disc->startup()) {
+ if (fatMount(partition->mount_point, partition->disc, 0,
CACHE_PAGES, CACHE_SECTORS_PER_PAGE)) {
success = true;
+ } else {
+ sec_t *partitions = NULL;
+ int partition_count = ntfsFindPartitions(partition->disc,
&partitions);
+ if (partition_count > 0 &&
ntfsMount(partition->mount_point, partition->disc, partitions[0],
CACHE_PAGES, CACHE_SECTORS_PER_PAGE, NTFS_SU)) {
+ success = true;
+ }
+ if (partitions) free(partitions);
}
} else if (is_gecko(partition) && retry_gecko) {
retry_gecko = false;
@@ -171,6 +173,8 @@
success = ISFS_Mount();
} else if (partition == PA_OTP) {
success = OTP_Mount();
+ } else if (partition == PA_SEEPROM) {
+ success = SEEPROM_Mount();
}
printf(success ? "succeeded.\n" : "failed.\n");
if (success && is_gecko(partition)) partition->geckofail = false;
@@ -194,6 +198,7 @@
if (!dvd_mountWait() && !dvd_last_access()) dvd_stop();
} else if (is_fat(partition)) {
fatUnmount(partition->prefix);
+ ntfsUnmount(partition->mount_point, false);
success = true;
} else if (partition == PA_NAND) {
success = NANDIMG_Unmount();
@@ -201,6 +206,8 @@
success = ISFS_Unmount();
} else if (partition == PA_OTP) {
success = OTP_Unmount();
+ } else if (partition == PA_SEEPROM) {
+ success = SEEPROM_Unmount();
}
printf(success ? "succeeded.\n" : "failed.\n");
@@ -299,9 +306,9 @@
void initialise_fs() {
NANDIMG_Mount();
OTP_Mount();
+ SEEPROM_Mount();
ISFS_SU();
if (ISFS_Initialize() == IPC_OK) ISFS_Mount();
- initialise_fat();
}
/*
=======================================
--- /trunk/source/fs.h Sun Dec 20 07:24:37 2009
+++ /trunk/source/fs.h Fri Feb 26 22:31:01 2010
@@ -36,7 +36,7 @@
const DISC_INTERFACE *disc;
} VIRTUAL_PARTITION;
-VIRTUAL_PARTITION VIRTUAL_PARTITIONS[10];
+VIRTUAL_PARTITION VIRTUAL_PARTITIONS[11];
const u32 MAX_VIRTUAL_PARTITIONS;
VIRTUAL_PARTITION *PA_GCSDA;
VIRTUAL_PARTITION *PA_GCSDB;
@@ -48,6 +48,7 @@
VIRTUAL_PARTITION *PA_NAND;
VIRTUAL_PARTITION *PA_ISFS;
VIRTUAL_PARTITION *PA_OTP;
+VIRTUAL_PARTITION *PA_SEEPROM;
void initialise_fs();
=======================================
--- /trunk/source/ftp.c Sun Dec 20 07:24:37 2009
+++ /trunk/source/ftp.c Fri Feb 26 22:31:01 2010
@@ -766,7 +766,7 @@
}
} else {
if ((result = net_connect(client->data_socket, (struct
sockaddr *)&client->address, sizeof(client->address))) < 0) {
- if (result == -EINPROGRESS) result = -EAGAIN;
+ if (result == -EINPROGRESS || result == -EALREADY) result
= -EAGAIN;
if (result != -EAGAIN && result != -EISCONN)
printf("Unable to connect to client: [%i] %s\n", -result,
strerror(-result));
}
if (result >= 0 || result == -EISCONN) {
=======================================
--- /trunk/source/ftpii.c Sun Dec 20 07:24:37 2009
+++ /trunk/source/ftpii.c Fri Feb 26 22:31:01 2010
@@ -59,6 +59,7 @@
}
static void initialise_ftpii() {
+ initialise_video();
DI_Init();
initialise_video();
PAD_Init();