Exemple #1
0
uint8_t   rawDataLoad0(RawData *raw_data, const RawFile *raw_file)
{
    word_t   flen;
    uint8_t *buff;
    uint32_t counter;

    CSTRING *fname_cstr;
    CBYTES  *cbytes;

    fname_cstr = cstring_new(raw_file->file_name, LOC_RAW_0013);
    if(NULL_PTR == fname_cstr)
    {
        dbg_log(SEC_0132_RAW, 0)(LOGSTDOUT, "error:rawDataLoad: new fname string failed\n");
        return RAW_FILE_FAIL;
    }

    cbytes = cbytes_new(0);
    if(NULL_PTR == cbytes)
    {
        cstring_free(fname_cstr);
        dbg_log(SEC_0132_RAW, 0)(LOGSTDOUT, "error:rawDataLoad: new cbytes failed\n");
        return RAW_FILE_FAIL;
    }

    if(EC_FALSE == cdfs_read(raw_file->cdfs_md_id, fname_cstr, cbytes))
    {
        cstring_free(fname_cstr);
        cbytes_free(cbytes);
        dbg_log(SEC_0132_RAW, 0)(LOGSTDOUT, "error:rawFileOpen: read file %s failed\n", (char *)raw_file->file_name);
        return RAW_FILE_FAIL;
    }

    buff = cbytes_buf(cbytes);
    counter = 0;
    flen = gdbGetWord(buff, &counter);/*get compressed data len from the first word*/

    if(RAW_FILE_SUCC != rawDataUnCompress(raw_data, buff + counter, flen))
    {
        cstring_free(fname_cstr);
        cbytes_free(cbytes);
        dbg_log(SEC_0132_RAW, 0)(LOGSTDOUT, "error:rawDataLoad: uncompress %ld bytes failed\n", flen);
        return RAW_FILE_FAIL;
    }

    cstring_free(fname_cstr);
    cbytes_free(cbytes);

    dbg_log(SEC_0132_RAW, 9)(LOGSTDOUT, "[DEBUG] rawDataLoad: uncompress %d bytes => %d bytes, rate = %.2f\n",
                       flen, raw_data->cur_size, (flen + 0.0)/(raw_data->cur_size + 0.0));
    return RAW_FILE_SUCC;
}
Exemple #2
0
static errno_t     cdfs_readdir( struct uufile *f, struct dirent *dirp )
{
    iso_dir_entry e;
    size_t lastpos = f->pos;

    size_t ret = cdfs_read( f, &e, sizeof(iso_dir_entry) );

    if( (ret <= 0) || (e.recordLength == 0) || (e.nameLength == 0) )
        return ENOENT;

    f->pos = lastpos + e.recordLength;

    dirp->d_reclen = 0;
    dirp->d_ino = e.dataStartSector[0];

    if( e.nameLength == 1 )
    {
        // .
        if( e.name[0] == 0 ) 
        {
            strcpy( dirp->d_name, "." );
            dirp->d_namlen = 1;
            return 0;
        }

        // ..
        if( e.name[0] == 1 ) // .
        {
            strcpy( dirp->d_name, ".." );
            dirp->d_namlen = 2;
            return 0;
        }
    }

    size_t nlen = e.nameLength + 1;
    if( nlen > sizeof(dirp->d_name) ) nlen = sizeof(dirp->d_name);

    strlcpy( dirp->d_name, e.name, nlen );
    dirp->d_namlen = nlen - 1;
    return 0;
}
Exemple #3
0
int cmd_type(int ac, char **av)
{
  int rc;
  int handle=0;
  block_t buf_blk=0;
  block_t blk;
  int readbyte;
  unsigned long pos;

//display_puts("cdfs_open\n");
  handle = cdfs_open(av[0]);
  if(handle<0) {
    dsp_open_error(handle);
    goto EXITCMD;
  }

//display_puts("block_init\n");
  blk = block_init(BLOCK_SHM_ID);
  if(blk==0) {
    display_puts("error:block_open\n");
    goto EXITCMD;
  }

//display_puts("block_alloc\n");
  buf_blk = block_alloc(blk);
  if(buf_blk==0) {
    display_puts("rc=");
    sint2dec(handle,s);
    display_puts(s);
    goto EXITCMD;
  }

  char *buf=block_addr(blk,buf_blk);

//display_puts("cdfs_read\n");
  pos=0;
  readbyte=cdfs_read(handle,pos,BLOCK_SHM_ID,buf_blk,BLOCK_SIZE);
  if(readbyte<0) {
    display_puts("rc=");
    sint2dec(readbyte,s);
    display_puts(s);
    goto EXITCMD;
  }


//  display_puts("\n");
//syscall_wait(10);
  //dump(buf);

  int i;
  for(i=0;i<readbyte;i++) {
    display_putc(*buf);
//syscall_wait(10);
    buf++;
  }

//display_puts("\n");
//display_puts("-------\n");
//display_puts("len=");
//sint2dec(readbyte,s);
//display_puts(s);
//display_puts("\n");
//syscall_wait(50);


EXITCMD:

  if(handle>0) {
//display_puts("cdfs_close\n");
    rc = cdfs_close(handle);
    if(rc<0) {
      display_puts("rc=");
      sint2dec(rc,s);
      display_puts(s);
    }
  }

  if(buf_blk) {
    block_free(blk,buf_blk);
  }

  return 0;
}
Exemple #4
0
int cmd_exec(int ac, char **av)
{
  int handle=0;
  int pgmid=0;
  block_t buf_blk=0;
  int rc;
  block_t blk;
  int readbyte;
  unsigned long pos;

//display_puts("cdfs_open\n");
  handle = cdfs_open(av[0]);
  if(handle<0) {
    dsp_open_error(handle);
    goto EXITCMD;
  }

//display_puts("cdfs_stat\n");
  char infobuf[sizeof(struct file_info)+CDFS_FULLPATH_MAXLENGTH];
  struct file_info *info=(void*)infobuf;
  rc = cdfs_stat(handle,info,sizeof(infobuf));
  if(rc<0) {
    display_puts("rc=");
    sint2dec(rc,s);
    display_puts(s);
    goto EXITCMD;
  }

//display_puts("block_init\n");
  blk = block_init(BLOCK_SHM_ID);
  if(blk==0) {
    display_puts("error:block_init\n");
    goto EXITCMD;
  }

//display_puts("block_alloc\n");
  buf_blk = block_alloc(blk);
  if(buf_blk==0) {
    display_puts("error:block_alloc\n");
    goto EXITCMD;
  }

  char *buf=block_addr(blk,buf_blk);

  char *pgname = get_filename(av[0]);
//display_puts("pgm_alloc\n");
  pgmid = environment_allocimage(pgname,info->size);
  if(pgmid<0) {
    display_puts("rc=");
    sint2dec(pgmid,s);
    display_puts(s);
    goto EXITCMD;
  }
//display_puts("size=");
//sint2dec(info->size,s);
//display_puts(s);
//display_puts("\n");

//display_puts("cdfs_read\n");
  pos=0;

  for(;;) {
    readbyte=cdfs_read(handle,pos,BLOCK_SHM_ID,buf_blk,BLOCK_SIZE);
    if(readbyte<0) {
      break;
    }

//display_puts(" readbyte=");
//sint2dec(readbyte,s);
//display_puts(s);

    rc=environment_loadimage(pgmid,buf,readbyte);
    if(rc<0) {
      display_puts(" loadimage rc=");
      sint2dec(rc,s);
      display_puts(s);
      goto EXITCMD;
    }

    pos += readbyte;
  }

  rc = program_exec(pgmid,ac, av);
  if(rc<0) {
    goto EXITCMD;
  }

  int exitcode;
  program_wait(&exitcode, MESSAGE_MODE_WAIT);


EXITCMD:

  if(handle>0) {
//display_puts("cdfs_close\n");
    rc = cdfs_close(handle);
    if(rc<0) {
      display_puts("rc=");
      sint2dec(rc,s);
      display_puts(s);
    }
  }

  if(buf_blk) {
    block_free(blk,buf_blk);
  }

//display_puts("\n");
//syscall_wait(10);
  //dump(buf);


  return 0;
}