Fixes by Luca Mottola: don't call write with zero-length data; added parameter to specify block size to read command

This commit is contained in:
adamdunkels 2009-02-19 22:56:56 +00:00
parent 957ae56b13
commit 47a6eb5210

View file

@ -28,7 +28,7 @@
* *
* This file is part of the Contiki operating system. * This file is part of the Contiki operating system.
* *
* $Id: shell-file.c,v 1.8 2008/12/01 15:58:14 nvt-se Exp $ * $Id: shell-file.c,v 1.9 2009/02/19 22:56:56 adamdunkels Exp $
*/ */
/** /**
@ -46,6 +46,7 @@
#include <string.h> #include <string.h>
#define MAX_FILENAME_LEN 40 #define MAX_FILENAME_LEN 40
#define MAX_BLOCKSIZE 40
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
PROCESS(shell_ls_process, "ls"); PROCESS(shell_ls_process, "ls");
@ -159,9 +160,14 @@ PROCESS_THREAD(shell_write_process, ev, data)
PROCESS_EXIT(); PROCESS_EXIT();
} }
cfs_write(fd, input->data1, input->len1); if(input->len1 > 0) {
cfs_write(fd, input->data2, input->len2); cfs_write(fd, input->data1, input->len1);
}
if(input->len2 > 0) {
cfs_write(fd, input->data2, input->len2);
}
shell_output(&write_command, shell_output(&write_command,
input->data1, input->len1, input->data1, input->len1,
input->data2, input->len2); input->data2, input->len2);
@ -178,6 +184,7 @@ PROCESS_THREAD(shell_read_process, ev, data)
char filename[MAX_FILENAME_LEN]; char filename[MAX_FILENAME_LEN];
int len; int len;
int offset = 0; int offset = 0;
static int block_size = MAX_BLOCKSIZE;
PROCESS_EXITHANDLER(cfs_close(fd)); PROCESS_EXITHANDLER(cfs_close(fd));
PROCESS_BEGIN(); PROCESS_BEGIN();
@ -201,6 +208,15 @@ PROCESS_THREAD(shell_read_process, ev, data)
filename[len] = 0; filename[len] = 0;
offset = shell_strtolong(next, NULL); offset = shell_strtolong(next, NULL);
next++;
next = strchr(next, ' ');
block_size = shell_strtolong(next, NULL);
if(block_size > MAX_BLOCKSIZE) {
shell_output_str(&read_command,
"read: block size too large: ", data);
PROCESS_EXIT();
}
} }
fd = cfs_open(filename, CFS_READ); fd = cfs_open(filename, CFS_READ);
@ -212,11 +228,11 @@ PROCESS_THREAD(shell_read_process, ev, data)
} else { } else {
while(1) { while(1) {
char buf[40]; char buf[MAX_BLOCKSIZE];
int len; int len;
struct shell_input *input; struct shell_input *input;
len = cfs_read(fd, buf, sizeof(buf)); len = cfs_read(fd, buf, block_size);
if(len <= 0) { if(len <= 0) {
cfs_close(fd); cfs_close(fd);
PROCESS_EXIT(); PROCESS_EXIT();