#ifdef PKG_HANDLER
// Poll downloaded pkg files
if((pkg_dcount > 0) && (sec & 1) && (gTick.tick == rTick.tick))
{
CellFsDirent entry; u64 read_e; int fd; u16 pkg_count = 0;
if(cellFsOpendir(TEMP_DOWNLOAD_PATH, &fd) == CELL_FS_SUCCEEDED)
{
while((cellFsReaddir(fd, &entry, &read_e) == CELL_FS_SUCCEEDED) && (read_e > 0))
{
if(!extcmp(entry.d_name, ".pkg", 4))
{
int fdl = 0; char *dlfile = msg; _pkg_header pkg_header;
sprintf(dlfile, "%s%s", TEMP_DOWNLOAD_PATH, entry.d_name); pkg_count++;
cellFsChmod(dlfile, MODE);
if(cellFsOpen(dlfile, CELL_FS_O_RDONLY, &fdl, NULL, 0) == CELL_FS_SUCCEEDED)
{
if(cellFsRead(fdl, (void *)&pkg_header, sizeof(pkg_header), NULL) == CELL_FS_SUCCEEDED)
{
cellFsClose(fdl);
struct CellFsStat s;
if(cellFsStat(dlfile, &s) == CELL_FS_SUCCEEDED && pkg_header.pkg_size == s.st_size)
{
char pkgfile[MAX_PATH_LEN];
sprintf(pkgfile, "%s%s", DEFAULT_PKG_PATH, dlfile + strlen(TEMP_DOWNLOAD_PATH));
cellFsRename(dlfile, pkgfile);
pkg_dcount--;
if(pkg_auto_install) installPKG(pkgfile, msg);
}
}
else
cellFsClose(fdl);
}
}
}
cellFsClosedir(fd);
if(pkg_count == 0) pkg_auto_install = pkg_dcount = 0; // disable polling if no pkg files were found (e.g. changed to background download)
}
}
#endif