Ejemplo n.º 1
0
//---------------------------------------------------------------------------
static int fs_getstat(iop_file_t *fd, const char *name, fio_stat_t *stat)
{
	fat_driver* fatd;
	int ret;
	unsigned int cluster = 0;
	fat_dir fatdir;

	_fs_lock();

	XPRINTF("USBHDFSD: fs_getstat called: unit %d name %s\n", fd->unit, name);

	fatd = fat_getData(fd->unit);
	if (fatd == NULL) { _fs_unlock(); return -ENODEV; }

	XPRINTF("USBHDFSD: Calling fat_getFileStartCluster from fs_getstat\n");
	ret = fat_getFileStartCluster(fatd, name, &cluster, &fatdir);
	if (ret < 0) {
		_fs_unlock();
		return ret;
	}

	memset(stat, 0, sizeof(fio_stat_t));
	fillStat(stat, &fatdir);

	_fs_unlock();
	return 0;
}
Ejemplo n.º 2
0
//---------------------------------------------------------------------------
static int fs_dread(iop_file_t *fd, fio_dirent_t *buffer)
{
	fat_driver* fatd;
	int ret;
	fs_dir* rec = (fs_dir *) fd->privdata;

	if (rec == NULL)
		return -EBADF;

	_fs_lock();

	XPRINTF("USBHDFSD: fs_dread called: unit %d\n", fd->unit);

	fatd = fat_getData(fd->unit);
	if (fatd == NULL) { _fs_unlock(); return -ENODEV; }

	if (rec->dirent.file_flag != FS_FILE_FLAG_FOLDER) {
		_fs_unlock();
		return -ENOTDIR;
	}

	while (rec->status > 0
		&& (rec->current_fatdir.attr & FAT_ATTR_VOLUME_LABEL
		|| ((rec->current_fatdir.attr & (FAT_ATTR_HIDDEN | FAT_ATTR_SYSTEM)) == (FAT_ATTR_HIDDEN | FAT_ATTR_SYSTEM))))
			rec->status = fat_getNextDirentry(fatd, &rec->fatdlist, &rec->current_fatdir);

	ret = rec->status;
	if (rec->status >= 0)
	{
		memset(buffer, 0, sizeof(fio_dirent_t));
		fillStat(&buffer->stat, &rec->current_fatdir);
		strcpy(buffer->name, rec->current_fatdir.name);
	}

	if (rec->status > 0)
		rec->status = fat_getNextDirentry(fatd, &rec->fatdlist, &rec->current_fatdir);

	_fs_unlock();
	return ret;
}
Ejemplo n.º 3
0
jobject FUSE26Util::newStat(JNIEnv *env, const struct stat *st) {
    CSLogTraceEnter("jobject FUSE26Util::newStat(%p, %p)", env, st);

    jobject res = NULL;
    jclass clazz = env->FindClass(STAT_CLASS);
    if(clazz == NULL || env->ExceptionCheck() == JNI_TRUE)
        CSLogError("Could not find class \"%s\"", STAT_CLASS);
    else {
        jmethodID constructor = env->GetMethodID(clazz, STAT_INIT_NAME,
                STAT_INIT_SIGNATURE);
        if(constructor == NULL || env->ExceptionCheck() == JNI_TRUE)
            CSLogError("Could not find method \"%s\" with signature %s.", STAT_INIT_NAME,
                STAT_INIT_SIGNATURE);
        else {
            jobject obj = env->NewObject(clazz, constructor);
            if(obj == NULL || env->ExceptionCheck() == JNI_TRUE)
                CSLogError("Could not create new Stat instance.");
            else {
                if(!fillStat(env, st, obj))
                    CSLogError("fillStat failed!");
                else
                    res = obj;
            }

            if(res == NULL && obj != NULL)
                env->DeleteLocalRef(obj);
        }
    }

    if(clazz != NULL)
        env->DeleteLocalRef(clazz);

    if(env->ExceptionCheck() == JNI_TRUE)
        env->ExceptionDescribe();

    CSLogTraceLeave("jobject FUSE26Util::newStat(%p, %p): %p", env, st, res);
    return res;
}