diff --git a/.gitignore b/.gitignore
index accabb3..8b638ae 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,5 +7,4 @@
*.elf
*.sfo
*.velf
-*.vpk
build
\ No newline at end of file
diff --git a/README.md b/README.md
index 62de390..11e2b18 100644
--- a/README.md
+++ b/README.md
@@ -107,6 +107,10 @@ Credits
Changelog
---------
+### Changelog 1.83
+- Fixed automatic network update by using rawgit. This was needed because github removed support for TLS 1.0/1.1.
+- Removed changelog support, because the files at ux0:patch must now be pfs encrypted.
+
### Changelog 1.82
- Added support for firmware 3.65/3.67.
diff --git a/init.c b/init.c
index d23b06f..55346f6 100644
--- a/init.c
+++ b/init.c
@@ -83,8 +83,6 @@ INCLUDE_EXTERN_RESOURCE(kernel_skprx);
INCLUDE_EXTERN_RESOURCE(umass_skprx);
INCLUDE_EXTERN_RESOURCE(patch_skprx);
-INCLUDE_EXTERN_RESOURCE(changeinfo_txt);
-
#define DEFAULT_FILE(path, name, replace) { path, (void *)&_binary_resources_##name##_start, (int)&_binary_resources_##name##_size, replace }
static DefaultFile default_files[] = {
@@ -144,8 +142,6 @@ static DefaultFile default_files[] = {
DEFAULT_FILE("ux0:VitaShell/module/kernel.skprx", kernel_skprx, 1),
DEFAULT_FILE("ux0:VitaShell/module/umass.skprx", umass_skprx, 1),
DEFAULT_FILE("ux0:VitaShell/module/patch.skprx", patch_skprx, 1),
-
- DEFAULT_FILE("ux0:patch/VITASHELL/sce_sys/changeinfo/changeinfo.xml", changeinfo_txt, 1),
};
char vitashell_titleid[12];
@@ -307,11 +303,6 @@ void installDefaultFiles() {
sceIoMkdir("ux0:VitaShell/theme/Default", 0777);
sceIoMkdir("ux0:VitaShell/theme/Electron", 0777);
- sceIoMkdir("ux0:patch", 0006);
- sceIoMkdir("ux0:patch/VITASHELL", 0006);
- sceIoMkdir("ux0:patch/VITASHELL/sce_sys", 0006);
- sceIoMkdir("ux0:patch/VITASHELL/sce_sys/changeinfo", 0006);
-
// Write default files if they don't exist
int i;
for (i = 0; i < (sizeof(default_files) / sizeof(DefaultFile)); i++) {
diff --git a/main.c b/main.c
index dd8bda9..07fec97 100644
--- a/main.c
+++ b/main.c
@@ -276,6 +276,9 @@ static void refreshCopyList() {
static int handleFile(const char *file, FileListEntry *entry) {
int res = 0;
+ // try to fix GPU freeze
+ vita2d_wait_rendering_done();
+
int type = getFileType(file);
switch (type) {
@@ -1152,6 +1155,7 @@ static int dialogSteps() {
case DIALOG_STEP_EXTRACTED:
{
+ removePath("ux0:patch/VITASHELL", NULL);
launchAppByUriExit("VSUPDATER");
setDialogStep(DIALOG_STEP_NONE);
break;
diff --git a/main.h b/main.h
index c38f2d4..1ce2e6d 100644
--- a/main.h
+++ b/main.h
@@ -53,7 +53,7 @@
// VitaShell version major.minor
#define VITASHELL_VERSION_MAJOR 0x01
-#define VITASHELL_VERSION_MINOR 0x82
+#define VITASHELL_VERSION_MINOR 0x83
#define VITASHELL_VERSION ((VITASHELL_VERSION_MAJOR << 0x18) | (VITASHELL_VERSION_MINOR << 0x10))
diff --git a/release/VitaShell.vpk b/release/VitaShell.vpk
index 647a77b..9da5c80 100644
Binary files a/release/VitaShell.vpk and b/release/VitaShell.vpk differ
diff --git a/resources/changeinfo.txt b/resources/changeinfo.txt
deleted file mode 100644
index 8cccc42..0000000
--- a/resources/changeinfo.txt
+++ /dev/null
@@ -1,360 +0,0 @@
-
-
-
-
- ]]>
-
-
-
-- Added sleep prevention when using FTP, deleting and copying files.
-- Added a scrollbar.
-- Added date and time to info bar.
-- Added correct enter and cancel buttons assignment.
-- Added some cosmetic changes.
-- Fixed crash when deleting marked entries.
-- Copied entries now still rest in clipboard after pasting them.
-- The application now cleans itself before launching homebrews.
- ]]>
-
-
-
-- Added move ability (only possible within same partition).
-- Added tabulator support in text viewer.
-- Removed `Paste`, `Delete`, `Rename` and `New folder` in read-only partitions.
-- Fixed size string of files over 1GB.
-- Fixed alphabetical sorting.
-- Fixed battery percent bug being -1% on PSM Dev Assistant.
- ]]>
-
-
-
-- Added battery symbol by Ruben_Wolf.
-- Switched to official PGF font.
-- Changed triangle-menu animation to ease-out.
-- Improved mark all/unmark all feature.
-- Fixed percentage precision in progress bar.
-- Fixed small bug in move operation.
- ]]>
-
-
-
-- Added network host mountpoint.
-- Added ability to compile shader programs (use the _v.cg suffix for vertexes and _f.cg for fragments).
-- Finished photo viewer. Use the right analog stick to zoom in/out. Left analog stick to move.
- L/R to rotate and X/O to change display mode.
-- Updated to newest vita2dlib which fixed many bugs with images.
-- Improved `New folder` by extending to `New folder (X)`, where `X` is an increasing number.
-- Improved message dialog texts.
-- Limited filenames so it doesn't overlap with the size/folder text.
-- Fixed infinite loop when copying the src to its subfolder by an error result.
-- Fixed FTP client crashes and added support for Turboclient Android.
-- Fixed alphabetical sorting, finally.
- ]]>
-
-
-
-- Optimized I/O operations regarding speed.
- ]]>
-
-
-
-- Added custom dialogs.
-- Added graphics by Freakler.
-- Added possibility to use FTP in background.
-- I/O operations can now be canceled.
-- Removed misc stuff, shader compiler, homebrew loading, PBOOT.PBP signing, network host.
-- Fixed various bugs.
- ]]>
-
-
- 2GB zip archives (dropped support for 7zip and rar though).
-- Added cache system for zipfs (faster file reading when browsing in zip archives).
-- Added possibility to customize the application's UI.
-- Added possibility to translate the application.
-- Fixed 12h time conversion.
- ]]>
-
-
-
-- Added random wallpaper feature.
-- Changed location of themes to `ux0:VitaShell/theme/YOUR_THEME_NAME`.
-- Fixed russian and korean language support.
- ]]>
-
-
-
-- Fixed wrong time string for files and folders. Thanks to persona5.
-- Fixed INSTALL_WARNING text crash.
-- Added default files creating.
- ]]>
-
-
-
-- Added files and folder icons by littlebalup.
-- Added charging battery icon by ribbid987.
-- Added sfo reader by theorywrong.
-- Added translation support for turkish (english_gb uses the same id as turkish, fix it Sony!).
-- Fixed bug where copied files and folders of archives didn't stay on clipboard.
-- Allow auto screen-off.
-- System information trigger combo changed to START instead of L+R+START. System information can now also be translated, thanks to littlebalup.
- ]]>
-
-
-
- You'll then be able to download it within the VitaShell application and it will update both
- molecularShell and VitaShell to the newest verison.
-- Added text and audio file icon by littlebalup.
-- Updated to latest libftpvita which fixed file size string > 2GB and added APPE command.
- ]]>
-
-
-
-- Added patch to make .vpk installation appearing as full version instead of test version.
-- Added text editor by BigBoot (WIP).
-- Added `More` entry to the context menu.
-- Added `Install all` feature to install all packages available in the folder (by ribbid987).
-- Added `Calculate SHA1` feature by xerpia64.
-- Added support for ftp promoting for https://github.com/soywiz/vitaorganizer.
-- Fixed `Move` operation. Now it does integrate into folders and replace files.
-- Dropped GENERAL_COLOR, now all colors are adjustable.
- ]]>
-
-
-
-- Added changelog to the VitaShell bubble (press /\ or hold the bubble of VitaShell in the livearea).
-- Added ability to resume to the directory you've last visted before exiting VitaShell).
-- Added memory card free space check. A message will pop up if you don't have enough free space for copying or installing.
-- Leaving to livearea or suspending the device does now no longer corrupt an IO process anymore (while copying things you can leave now VitaShell and resume).
-- Improved text editor and added search feature to context menu (press /\).
-- The temporary folder `ptmp/pkg` is now cleared after cancelling or unsuccesful installation.
-- Fixed bug where copying to different partitions didn't work.
-- Fixed network update bug.
- ]]>
-
-
-
-- Fixed ID3 tag parsing.
-- Play and pause icons where swapped, fixed.
-- FTP does now show `Please wait...` until it has been connected to Wi-Fi.
- ]]>
-
-
- `Export media`).
-- Added battery percentage to system information (thanks to littlebalup).
-- Added toolbox where more features will have place, by theorywrong (press START).
-- Improved stability for file browser delete operation.
-- Pressing L in the music player will now restart the song if the song is not at the beginning.
-- VitaShell will now remove the unused updater bubble after successful updating.
- ]]>
-
-
-
-- Added scanning for unsafe fself's and imports.
-- Added lrc support for audio player by Mayoshiroi.
-- Added partition used/total size information, thanks to littlebalup.
-- Added `Install folder` by soarqin.
- ]]>
-
-
-
- ]]>
-
-
-
- Safe homebrews like RetroArch will now recognize files and folders
- that you have moved from `ux0:video`.
-- Added scanning for dangerous functions in packages.
-- Added possibility to choose compression level.
-- Fixed time information in zip archives.
- ]]>
-
-
-
-- Added the long desired `Properties` feature. You can also check whether an eboot.bin is safe or not.
- ]]>
-
-
-
- This adds the ability to disable auto-update and power options have been added where you can
- reboot, enter standby or turn off your device.
-- Fixed local date being incorrect.
-- The name `molecularShell` will now be displayed if it's runned as molecularShell, otherwise `VitaShell`.
- This will help differentiating the two applications, as molecularShell is from now on a safe homebrew
- and doesn't have the full range of features like VitaShell. Additionally in molecularShell you can see
- the HENkaku settings section which are hidden in VitaShell (note that both still share the same eboot.bin,
- only the flag is different).
- ]]>
-
-
-
-- Changed default HENkaku spoofed version to 3.63.
-- Fixed bug where you couldn't exit the application.
- ]]>
-
-
-
-- Added RAR archive support (by Mayoshiroi).
-- Added coredump viewer.
- ]]>
-
-
-
-- Fixed VPK installation crash.
-- Fixed bug where `theme.txt` was always resetted.
-- Updated to newest libftpvita.
- ]]>
-
-
-
-- Added ability to mount game card as usb device.
-- Added possibility to refresh the livearea.
-- Added scrolling text for long filenames.
-- Added `Sort by` option to context menu (R trigger combo removed).
-- Added `Electron` theme by Acemad, the winner of the VitaShell theme contest.
-- Added theme selector.
-- Improved property dialog animation.
-- Fixed text editor bugs.
-- Fixed bug where USB cable wasn't recognized.
-- Fixed bug where VitaShell left to livearea after deleting the updater.
-- Removed battery icon in status bar for PSTV.
-- File statistics are now inherited when copying.
-- I/O operations speed will now be showed in KB/s.
-- Made control smoother.
- ]]>
-
-
-
-- Fixed bug where insufficent memory dialog appeared on uma0:.
-- Fixed bug where pressing triangle crashed if unsafe mode was disabled.
- ]]>
-
-
-
- ]]>
-
-
-
-- Added support for PSVSD uma0: mounting.
-- Fixed bug where the right analog stick was simulated when the headphone was plugged in.
- ]]>
-
-
-
-- Added option in `More->` to open applications in decrypted mode (bypass PFS). Thanks to frangarcj.
-- Added ability to mount sd2vita and psvsd as usb device.
-- Fixed bug where `imc0:` could not be mounted if the Memory Card was not available.
-- Fixed bug where accessing the settings menu crashed if there was no Memory Card available.
-- Fixed bug where automatic usb connection was not blocked, after leaving and resuming VitaShell.
-- PS TV will now always open FTP when pressing SELECT.
- ]]>
-
-
-
-- Fixed bug where uma0: options were grayed out on non PS TV models.
-- Fixed bug where the QR code scanner showed the result twice.
- ]]>
-
-
-
-- Fixed bug where files from https could not be downloaded using QR code.
-- Fixed bug with pvsd usb device mounting where microSD could not be found.
- ]]>
-
-
-
- ]]>
-
-
-
- ]]>
-
-
-
-- Fixed QR download of URLs that link to files.
- ]]>
-
-
-
-- Added license database refresh by VitaSmith.
-- Fixed C2-12828-1 error.
- ]]>
-
-
-
-- Improved archive file system (opening archives should now be much faster).
-- Fixed keyboard freeze after using it multiple times.
-- Fixed file browser cursor correction.
-- Fixed Electron theme visual glitch and added new settings look (thanks to Acemad).
- ]]>
-
-
- 2GB couldn't be opened.
- ]]>
-
-
-
-- Added support for multi volume rar archives.
-- Added support for password encrypted zip archives.
-- Added support for file property in archives, now it can show size and contains.
-- Added natural sorting for filenames.
-- Fixed bug where size of files in archives over 2GB where shown as 16EB.
-- Fixed refresh license DB when ran from ur0:.
- ]]>
-
-
-
-- Fixed crash when using FTP.
- ]]>
-
-
-
-- Fixed bug where it didn't count files and folders in archives correctly.
-- Improved controls code.
- ]]>
-
-
-
- ]]>
-
-
diff --git a/resources/updater_eboot.bin b/resources/updater_eboot.bin
index d037eb5..ec53332 100644
Binary files a/resources/updater_eboot.bin and b/resources/updater_eboot.bin differ
diff --git a/updater/main.c b/updater/main.c
index c0da0cd..e40c038 100644
--- a/updater/main.c
+++ b/updater/main.c
@@ -1,19 +1,19 @@
/*
- VitaShell
- Copyright (C) 2015-2018, TheFloW
+ VitaShell
+ Copyright (C) 2015-2018, TheFloW
- This program 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 3 of the License, or
- (at your option) any later version.
+ This program 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 3 of the License, or
+ (at your option) any later version.
- This program 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.
+ This program 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, see .
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
*/
#include
@@ -31,138 +31,140 @@
#define HEAD_BIN PACKAGE_DIR "/sce_sys/package/head.bin"
typedef struct SfoHeader {
- uint32_t magic;
- uint32_t version;
- uint32_t keyofs;
- uint32_t valofs;
- uint32_t count;
+ uint32_t magic;
+ uint32_t version;
+ uint32_t keyofs;
+ uint32_t valofs;
+ uint32_t count;
} __attribute__((packed)) SfoHeader;
typedef struct SfoEntry {
- uint16_t nameofs;
- uint8_t alignment;
- uint8_t type;
- uint32_t valsize;
- uint32_t totalsize;
- uint32_t dataofs;
+ uint16_t nameofs;
+ uint8_t alignment;
+ uint8_t type;
+ uint32_t valsize;
+ uint32_t totalsize;
+ uint32_t dataofs;
} __attribute__((packed)) SfoEntry;
int launchAppByUriExit(char *titleid) {
- char uri[32];
- sprintf(uri, "psgm:play?titleid=%s", titleid);
+ char uri[32];
+ sprintf(uri, "psgm:play?titleid=%s", titleid);
- sceKernelDelayThread(10000);
- sceAppMgrLaunchAppByUri(0xFFFFF, uri);
- sceKernelDelayThread(10000);
- sceAppMgrLaunchAppByUri(0xFFFFF, uri);
+ sceAppMgrLaunchAppByUri(0xFFFFF, uri);
+ sceKernelExitProcess(0);
- sceKernelExitProcess(0);
-
- return 0;
+ return 0;
}
-void loadScePaf() {
- uint32_t ptr[0x100] = { 0 };
- ptr[0] = 0;
- ptr[1] = (uint32_t)&ptr[0];
- uint32_t scepaf_argp[] = { 0x400000, 0xEA60, 0x40000, 0, 0 };
- sceSysmoduleLoadModuleInternalWithArg(0x80000008, sizeof(scepaf_argp), scepaf_argp, ptr);
+static int loadScePaf() {
+ static uint32_t argp[] = { 0x180000, -1, -1, 1, -1, -1 };
+
+ int result = -1;
+
+ uint32_t buf[4];
+ buf[0] = sizeof(buf);
+ buf[1] = (uint32_t)&result;
+ buf[2] = -1;
+ buf[3] = -1;
+
+ return sceSysmoduleLoadModuleInternalWithArg(SCE_SYSMODULE_INTERNAL_PAF, sizeof(argp), argp, buf);
}
-int promote(char *path) {
- int res;
+static int unloadScePaf() {
+ uint32_t buf = 0;
+ return sceSysmoduleUnloadModuleInternalWithArg(SCE_SYSMODULE_INTERNAL_PAF, 0, NULL, &buf);
+}
- loadScePaf();
+int promoteApp(const char *path) {
+ int res;
- res = sceSysmoduleLoadModuleInternal(SCE_SYSMODULE_PROMOTER_UTIL);
- if (res < 0)
- return res;
+ res = loadScePaf();
+ if (res < 0)
+ return res;
- res = scePromoterUtilityInit();
- if (res < 0)
- return res;
+ res = sceSysmoduleLoadModuleInternal(SCE_SYSMODULE_INTERNAL_PROMOTER_UTIL);
+ if (res < 0)
+ return res;
- res = scePromoterUtilityPromotePkg(path, 0);
- if (res < 0)
- return res;
+ res = scePromoterUtilityInit();
+ if (res < 0)
+ return res;
- int state = 0;
- do {
- res = scePromoterUtilityGetState(&state);
- if (res < 0)
- return res;
+ res = scePromoterUtilityPromotePkgWithRif(path, 1);
+ if (res < 0)
+ return res;
- sceKernelDelayThread(100 * 1000);
- } while (state);
+ res = scePromoterUtilityExit();
+ if (res < 0)
+ return res;
- int result = 0;
- res = scePromoterUtilityGetResult(&result);
- if (res < 0)
- return res;
+ res = sceSysmoduleUnloadModuleInternal(SCE_SYSMODULE_INTERNAL_PROMOTER_UTIL);
+ if (res < 0)
+ return res;
- res = scePromoterUtilityExit();
- if (res < 0)
- return res;
+ res = unloadScePaf();
+ if (res < 0)
+ return res;
- res = sceSysmoduleUnloadModuleInternal(SCE_SYSMODULE_PROMOTER_UTIL);
- if (res < 0)
- return res;
-
- return result;
+ return res;
}
char *get_title_id(const char *filename) {
- char *res = NULL;
- long size = 0;
- FILE *fin = NULL;
- char *buf = NULL;
- int i;
+ char *res = NULL;
+ long size = 0;
+ FILE *fin = NULL;
+ char *buf = NULL;
+ int i;
- SfoHeader *header;
- SfoEntry *entry;
-
- fin = fopen(filename, "rb");
- if (!fin)
- goto cleanup;
- if (fseek(fin, 0, SEEK_END) != 0)
- goto cleanup;
- if ((size = ftell(fin)) == -1)
- goto cleanup;
- if (fseek(fin, 0, SEEK_SET) != 0)
- goto cleanup;
- buf = calloc(1, size + 1);
- if (!buf)
- goto cleanup;
- if (fread(buf, size, 1, fin) != 1)
- goto cleanup;
+ SfoHeader *header;
+ SfoEntry *entry;
+
+ fin = fopen(filename, "rb");
+ if (!fin)
+ goto cleanup;
+ if (fseek(fin, 0, SEEK_END) != 0)
+ goto cleanup;
+ if ((size = ftell(fin)) == -1)
+ goto cleanup;
+ if (fseek(fin, 0, SEEK_SET) != 0)
+ goto cleanup;
+ buf = calloc(1, size + 1);
+ if (!buf)
+ goto cleanup;
+ if (fread(buf, size, 1, fin) != 1)
+ goto cleanup;
- header = (SfoHeader*)buf;
- entry = (SfoEntry*)(buf + sizeof(SfoHeader));
- for (i = 0; i < header->count; ++i, ++entry) {
- const char *name = buf + header->keyofs + entry->nameofs;
- const char *value = buf + header->valofs + entry->dataofs;
- if (name >= buf + size || value >= buf + size)
- break;
- if (strcmp(name, "TITLE_ID") == 0)
- res = strdup(value);
- }
+ header = (SfoHeader*)buf;
+ entry = (SfoEntry*)(buf + sizeof(SfoHeader));
+ for (i = 0; i < header->count; ++i, ++entry) {
+ const char *name = buf + header->keyofs + entry->nameofs;
+ const char *value = buf + header->valofs + entry->dataofs;
+ if (name >= buf + size || value >= buf + size)
+ break;
+ if (strcmp(name, "TITLE_ID") == 0)
+ res = strdup(value);
+ }
cleanup:
- if (buf)
- free(buf);
- if (fin)
- fclose(fin);
+ if (buf)
+ free(buf);
+ if (fin)
+ fclose(fin);
- return res;
+ return res;
}
int main(int argc, const char *argv[]) {
- char *titleid = get_title_id(PACKAGE_DIR "/sce_sys/param.sfo");
- if (titleid && strcmp(titleid, "VITASHELL") == 0) {
- promote(PACKAGE_DIR);
- }
+ // Destroy other apps
+ sceAppMgrDestroyOtherApp();
- launchAppByUriExit("VITASHELL");
+ char *titleid = get_title_id(PACKAGE_DIR "/sce_sys/param.sfo");
+ if (titleid && strcmp(titleid, "VITASHELL") == 0) {
+ promoteApp(PACKAGE_DIR);
+ }
- return 0;
+ launchAppByUriExit("VITASHELL");
+
+ return 0;
}
diff --git a/updater/updater_eboot.bin b/updater/updater_eboot.bin
deleted file mode 100644
index d037eb5..0000000
Binary files a/updater/updater_eboot.bin and /dev/null differ
diff --git a/utils.c b/utils.c
index c4dabfb..95fefd2 100644
--- a/utils.c
+++ b/utils.c
@@ -400,11 +400,7 @@ int launchAppByUriExit(const char *titleid) {
char uri[32];
snprintf(uri, sizeof(uri), "psgm:play?titleid=%s", titleid);
- sceKernelDelayThread(10000);
sceAppMgrLaunchAppByUri(0xFFFFF, uri);
- sceKernelDelayThread(10000);
- sceAppMgrLaunchAppByUri(0xFFFFF, uri);
-
sceKernelExitProcess(0);
return 0;