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;