Exemple #1
0
static int dfs_uffs_seek(struct dfs_fd* file,
                  rt_off_t offset)
{
	int result;

	/* set offset as current offset */
	if (file->type == FT_DIRECTORY)
	{
		uffs_rewinddir((uffs_DIR *)(file->data));
		result = uffs_seekdir((uffs_DIR *)(file->data), offset/sizeof(struct dirent));
		if (result >= 0)
		{
			file->pos = offset; 
			return offset;
		}
	}
	else if (file->type == FT_REGULAR)
	{
		result = uffs_seek((int)(file->data), offset, USEEK_SET);
		if (result >= 0)	
			return offset;
	}

	return uffs_result_to_dfs(uffs_get_error());
}
Exemple #2
0
/// dir is the DOS equivalent of ls
static byte DirCmd(const unsigned char *cmd, const CLS1_ConstStdIOType *io) {
	/* precondition: cmd starts with "dir" */
	uffs_DIR *curdir = cwd;
	char d_name[UFFS_PATHSIZE];
	byte res = ERR_OK;
	
	if (*(cmd + sizeof("dir") - 1) == ' ')
	{ /* space after "dir": read name */
		if (UTIL1_ReadEscapedName(cmd + sizeof("dir"),
				(unsigned char*)d_name, sizeof(d_name), NULL,
				NULL, NULL) == ERR_OK)
		{
			curdir = uffs_opendir(d_name);
			res = uffs_get_error();
		}
		else
		{
			CLS1_SendStr((unsigned char*) "reading directory name failed!\r\n",
					io->stdErr);
			res = ERR_FAILED;
		}
	}
	// else use current directory
	struct uffs_dirent *entry;
	
	if (curdir == NULL)
	{
		CLS1_SendStr((unsigned char*) "can't open dir\r\n", io->stdErr);
		res = ERR_FAILED;
	}
	uffs_rewinddir(curdir);

	while ((entry = uffs_readdir(curdir)))
	{
		MSGLN( "%s", entry->d_name);
	}
	// unless it was cwd close it
	if (*(cmd + sizeof("dir") - 1) == ' ')
		uffs_closedir(curdir);
	return res;
}