コード例 #1
0
ファイル: hdd_fio.c プロジェクト: ps2dev/ps2sdk
static int ioctl2DeleteLastSub(hdd_file_slot_t *fileSlot)
{
	int			rv;
	u32 		device=fileSlot->f->unit;
	apa_cache_t	*mainPart;
	apa_cache_t	*subPart;

	if(!(fileSlot->f->mode & O_WRONLY))
		return -EACCES;

	if(fileSlot->nsub==0)
		return -ENOENT;

	if(!(mainPart=apaCacheGetHeader(device, fileSlot->parts[0].start, APA_IO_MODE_READ, &rv)))
		return rv;

	if((subPart=apaCacheGetHeader(device,
		mainPart->header->subs[mainPart->header->nsub-1].start, APA_IO_MODE_READ, &rv))) {
		fileSlot->nsub--;
		mainPart->header->nsub--;
		mainPart->flags|=APA_CACHE_FLAG_DIRTY;
		apaCacheFlushAllDirty(device);
		rv=apaDelete(subPart);
	}
	apaCacheFree(mainPart);
	return rv;
}
コード例 #2
0
int ioctl2DeleteLastSub(hdd_file_slot_t *fileSlot)
{
	int			rv;
	u32 		device=fileSlot->f->unit;
	apa_cache	*mainPart;
	apa_cache	*subPart;

	if(!(fileSlot->f->mode & O_WRONLY))
		return -EACCES;

	if(fileSlot->nsub==0)
		return -ENOENT;

	if(!(mainPart=cacheGetHeader(device, fileSlot->start, 0, &rv)))
		return rv;

	if((subPart=cacheGetHeader(device,
		mainPart->header->subs[mainPart->header->nsub-1].start, 0, &rv))) {
		fileSlot->nsub--;
		mainPart->header->nsub--;
		mainPart->flags|=CACHE_FLAG_DIRTY;
		cacheFlushAllDirty(device);
		rv=apaDelete(subPart);
	}
	cacheAdd(mainPart);
	return rv;
}
コード例 #3
0
ファイル: apa.c プロジェクト: EvertonSilva/ps2sdk
int apaRemove(u32 device, char *id)
{
	int			i;
	u32			nsub;
	apa_cache	*clink;
	apa_cache	*clink2;
	int			rv;

	for(i=0;i<maxOpen;i++)	// look to see if open
	{
		if(fileSlots[i].f!=0) {
			if(memcmp(fileSlots[i].id, id, APA_IDMAX)==0)
				return -EBUSY;
		}
	}
	if(id[0]=='_' && id[1]=='_')
		return -EACCES;
	if((clink=apaFindPartition(device, id, &rv))==NULL)
		return rv;
	if(passcmp(clink->header->fpwd, NULL))
	{
		cacheAdd(clink);
		return -EACCES;
	}
	// remove all subs frist...
	nsub=clink->header->nsub;
	clink->header->nsub=0;
	clink->flags|=CACHE_FLAG_DIRTY;
	cacheFlushAllDirty(device);
	for(i=nsub-1;i!=-1;i--)
	{
		if((clink2=cacheGetHeader(device, clink->header->subs[i].start, 0, &rv))){
			if((rv=apaDelete(clink2))){
				cacheAdd(clink);
				return rv;
			}
		}
	}
	if(rv==0)
		return apaDelete(clink);

	cacheAdd(clink);
	return rv;
}
コード例 #4
0
ファイル: hdd_fio.c プロジェクト: ps2dev/ps2sdk
static int apaRemove(s32 device, const char *id, const char *fpwd)
{
	u32			nsub;
	apa_cache_t	*clink;
	apa_cache_t	*clink2;
	int			rv, i;

	for(i=0;i<apaMaxOpen;i++)	// look to see if open
	{
		if(hddFileSlots[i].f!=0) {
			if(memcmp(hddFileSlots[i].id, id, APA_IDMAX)==0)
				return -EBUSY;
		}
	}
	if(id[0]=='_' && id[1]=='_')
		return -EACCES;
	if((clink=apaFindPartition(device, id, &rv))==NULL)
		return rv;
	if(apaPassCmp(clink->header->fpwd, fpwd))
	{
		apaCacheFree(clink);
		return -EACCES;
	}
	// remove all subs frist...
	nsub=clink->header->nsub;
	clink->header->nsub=0;
	clink->flags|=APA_CACHE_FLAG_DIRTY;
	apaCacheFlushAllDirty(device);
	for(i=nsub-1;i!=-1;i--)
	{
		if((clink2=apaCacheGetHeader(device, clink->header->subs[i].start, APA_IO_MODE_READ, &rv))){
			if((rv=apaDelete(clink2))){
				apaCacheFree(clink);
				return rv;
			}
		}
	}
	if(rv==0)
		return apaDelete(clink);

	apaCacheFree(clink);
	return rv;
}