예제 #1
0
BOOL
UfsFile::open(const TCHAR *name, uint32_t flags)
{
	int error;

	if (!_to_ascii(_ascii_filename, name, MAX_PATH))
		return FALSE;

	error = ufs_open(_ascii_filename, _f);
	DPRINTF((TEXT("open file \"%s\" "), name));

	if (!error)
		DPRINTF((TEXT("(%d byte).\n"), size()));
	else
		DPRINTF((TEXT("failed.\n")));

	return !error;
}
예제 #2
0
static int open_ts_file(stream_t * s)
{
    unsigned short  path_tmp[256] = {0};
    char * p_filename1;
    char file_new[256] = {0};
    int ret = 0;
	  mtos_sem_take(&ts_sem, 0);
    ret = ufs_close(s->fd);
	mtos_sem_give(&ts_sem);

    if (ret != FR_OK) {
        mtos_printk("UFS close FAIL %d\n", ret);
        return ret ;
    }

    memset(s->fd, 0, sizeof(ufs_file_t));
    memset(file_new, 0, 256);
    sprintf(file_new, "%s%04d%s", basename, rec_index, ".ts");
    memset(path_tmp, 0, 256);
    //mtos_printk("\n%s %d %s\n", __func__, __LINE__, file_new);
    p_filename1 = Convert_Utf8_To_Unicode((unsigned char *)file_new, path_tmp);
    memcpy(filename1, file_new, 256);

    do {
        //{
         mtos_sem_take(&ts_sem, 0);
        ret = ufs_open(s->fd, p_filename1, UFS_READ);
		 mtos_sem_give(&ts_sem);
        mtos_task_sleep(10);
    } while (ret == FR_NO_FILE && (is_file_seq_exit() == FALSE));
  if(ret == FR_OK)
  {
  	mtos_sem_take(&ts_sem, 0);
    ufs_ioctl(s->fd, FS_SEEK_LINKMAP, 0 , 0 , 0);
	mtos_sem_give(&ts_sem);
	}
    return ret;
}
예제 #3
0
파일: main.c 프로젝트: Joonie86/COBRA-7.3
PS2EMU_PATCHED_FUNCTION(int, open_iso, (int unk, char *path))
{
/*uint64_t val;
for(uint64_t i=0;i<0x50;i+=8)
{
val = dump_ram(0x3174478ULL+i);
int dump = ufs_open(0, "/tmp/dump");
ufs_write(dump, 1, (void *)val, 8);
}*/
	if (!vars->setup_done)
	{
//		if (strstr(path, "--COBRA--"))
	//	{

		int fd = ufs_open(0, CONFIG_FILE);
		if (fd >= 0)
		{
			uint8_t b;
			
			ufs_read(fd, 0, &b, 1);
			vars->is_cd = (b&1);
			
			ufs_read(fd, 1, vars->iso_file, 0x6FF);
			ufs_read(fd, 0x702, vars->mnt, 0xf0);
			if((strstr(vars->mnt, "mount")) || (strstr(path, "--COBRA--")))
			{
				uint8_t disable=0x00;
				ufs_write(fd, 0x702, &disable, 1);
				if (vars->is_cd)
				{
예제 #4
0
static int open_f(stream_t * stream, int mode, void * opts, int * file_format)
{
#ifndef __LINUX__
    ufs_file_t * f = malloc(sizeof(ufs_file_t)); //= stream->fd;
    recv_bytes = 0;
    memset(f, 0, sizeof(ufs_file_t));
    memset(filename1, 0, 512);
#else
    int f = 0;
#endif
    mode_t m = 0;
    file_size = 0;
    long long len;
    unsigned char * filename = NULL;
    struct stream_priv_s * p = (struct stream_priv_s *)opts;

    if (mode == STREAM_READ) {
        m = O_RDONLY;
    } else if (mode == STREAM_WRITE) {
        m = O_RDWR | O_CREAT | O_TRUNC;
    } else {
        mp_msg(MSGT_OPEN, MSGL_ERR, "[file] Unknown open mode %d\n", mode);
        m_struct_free(&stream_opts, opts);
        return STREAM_UNSUPPORTED;
    }

    if (p->filename) {
        filename = p->filename;
    } else if (p->filename2) {
        filename = p->filename2;
    } else {
        filename = NULL;
    }

    if (!filename) {
        mp_msg(MSGT_OPEN, MSGL_ERR, "[file] No filename\n");
        m_struct_free(&stream_opts, opts);
        return STREAM_ERROR;
    }

#if HAVE_DOS_PATHS

    // extract '/' from '/x:/path'
    if (filename[ 0 ] == '/' && filename[ 1 ] && filename[ 2 ] == ':') {
        filename++;
    }

#endif
    m |= O_BINARY;

    if (!strcmp(filename, "-")) {
#ifdef __LINUX__

        if (mode == STREAM_READ) {
            // read from stdin
            mp_msg(MSGT_OPEN, MSGL_INFO, MSGTR_ReadSTDIN);
            f = 0; // 0=stdin
#if HAVE_SETMODE
            setmode(fileno(stdin), O_BINARY);
#endif
        } else {
            mp_msg(MSGT_OPEN, MSGL_INFO, "Writing to stdout\n");
            f = 1;
#if HAVE_SETMODE
            setmode(fileno(stdout), O_BINARY);
#endif
        }

#endif
    } else {
#ifdef __LINUX__
        mode_t openmode = S_IRUSR | S_IWUSR;
#ifndef __MINGW32__
        openmode |= S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
#endif
        f = open(filename, m, openmode);

        if (f < 0) {
            mp_msg(MSGT_OPEN, MSGL_ERR, MSGTR_FileNotFound, filename);
            m_struct_free(&stream_opts, opts);
            return STREAM_ERROR;
        }

#else
        //  ufs_asc2uni(filename,filename1);
        //printf("\n before ufs open filename:%s \n",filename);
        memcpy(filename1, filename, strlen(filename));
        int ret  = 0;
        unsigned short * p_filename1;
        {
            unsigned short  path_tmp[512] = {0};
            p_filename1 = Convert_Utf8_To_Unicode((unsigned char *)filename, path_tmp);
            ret = ufs_open(f, p_filename1, UFS_READ);
        }

        if (ret != FR_OK) {
            mtos_printk("[%s][ERROR][ERROR]   UFS OPEN FAIL %d!!!!!!!!!\n", __func__, ret);
            m_struct_free(&stream_opts, opts);
            free(f);
            return STREAM_ERROR;
        }

#if 1
        // mtos_printk("\n%s %d \n", __func__, __LINE__);
        {
            int r = 0;
            char pvr_timeshift[512] = {0};
            char pvr_ists[32] = {0};
            recv_bytes_inter = 0;
            ret = ufs_read(f, pvr_timeshift, 512, &r);
            int time_mode;
            mp_timeshift_size = 0;
            file_size = 0;
			sect_size = 0;
            if (ret != FR_OK) {
                mtos_printk("[%s][ERROR][ERROR]   UFS OPEN FAIL %d!!!!!!!!!\n", __func__, ret);
                m_struct_free(&stream_opts, opts);
                return STREAM_ERROR;
            }

            if (strstr(pvr_timeshift, "pvrtimeshift")) {
                memcpy(&mp_timeshift_size, pvr_timeshift + 32, sizeof(int));
                memcpy(&time_mode, pvr_timeshift + 32 + sizeof(int), sizeof(int));
                memcpy(basename, pvr_timeshift + 32 + 2 * sizeof(int), 256);
                memcpy(&file_size, pvr_timeshift + 384, sizeof(int));
		  memcpy(&sect_size, pvr_timeshift + 384+sizeof(int), sizeof(int));
                rec_index = 1;
            }
        }
#endif
        printf("\n  ufs open ok f: %x \n", f);
#ifndef __LINUX__
        ret = ufs_ioctl(f, FS_SEEK_LINKMAP, 0 , 0 , 0);
#endif
#endif
    }

#ifdef __LINUX__
    len = lseek(f, 0, SEEK_END);
    lseek(f, 0, SEEK_SET);
#else

    if (fp_is_timeshift_file() == 1) {
		while(mp_rec_bytes<sect_size*2)
			{
			mtos_task_sleep(100);
			}
        len = mp_rec_bytes;
    } else if (file_size > 0) {
        len = file_size;
    } else {
        len = f->file_size;
    }

    if (ufs_lseek(f, 0, 0) == FR_OK) {
        OS_PRINTF("#########@@@@#######\n");
    } else {
        OS_PRINTF("#########@@1111@@#######\n");
    }

#endif
#ifdef __MINGW32__

    // seeks on stdin incorrectly succeed on MinGW
    if (f == 0) {
        len = -1;
    }

#endif

    if (len == -1) {
        if (mode == STREAM_READ) {
            stream->seek = seek_forward;
        }

        stream->type = STREAMTYPE_STREAM; // Must be move to STREAMTYPE_FILE
        stream->flags |= MP_STREAM_SEEK_FW;
    } else if (len >= 0) {
        stream->seek = seek;
        stream->end_pos = len;
        stream->type = STREAMTYPE_FILE;
    }

    mp_msg(MSGT_OPEN, MSGL_V, "[file] File size is %"PRId64" bytes\n", (int64_t)len);
    //  #ifdef __LINUX__
    stream->fd = f;
    //#endif
    stream->fill_buffer = fill_buffer;
    stream->write_buffer = write_buffer;
    stream->control = control;
    stream->read_chunk = 64 * 1024;
    m_struct_free(&stream_opts, opts);
    return STREAM_OK;
}