Ejemplo n.º 1
0
SNSS_RETURN_CODE 
SNSS_GetNextBlockType (SNSS_BLOCK_TYPE *blockType, SNSS_FILE *snssFile)
{
  char tagBuffer[TAG_LENGTH + 1];
  int pos = vfs_tell(snssFile->fp);

  if (vfs_read (tagBuffer, TAG_LENGTH, 1, snssFile->fp) != TAG_LENGTH) 
    return SNSS_READ_FAILED;
  tagBuffer[TAG_LENGTH] = '\0';
   
  /* reset the file pointer to the start of the block */
  vfs_seek (snssFile->fp, -TAG_LENGTH, VFS_SEEK_CUR);
  
  if (pos != vfs_tell(snssFile->fp))
    return SNSS_READ_FAILED;
  
  /* figure out which type of block it is */
  if (strcmp (tagBuffer, "BASR") == 0) 
  {
    *blockType = SNSS_BASR;
    return SNSS_OK;
  } 
  else if (strcmp (tagBuffer, "VRAM") == 0) 
  {
    *blockType = SNSS_VRAM;
    return SNSS_OK;
  }
  else if (strcmp (tagBuffer, "SRAM") == 0) 
  {
    *blockType = SNSS_SRAM;
    return SNSS_OK;
  }
  else if (strcmp (tagBuffer, "MPRD") == 0) 
  {
    *blockType = SNSS_MPRD;
    return SNSS_OK;
  }
  else if (strcmp (tagBuffer, "CNTR") == 0) 
  {
    *blockType = SNSS_CNTR;
    return SNSS_OK;
  }
  else if (strcmp (tagBuffer, "SOUN") == 0) 
  {
    *blockType = SNSS_SOUN;
    return SNSS_OK;
  }
  else 
  {
    *blockType = SNSS_UNKNOWN_BLOCK;
    return SNSS_OK;
  }
}
Ejemplo n.º 2
0
SNSS_RETURN_CODE
SNSS_CloseFile (SNSS_FILE **snssFile)
{
  int prevLoc;
  SNSS_RETURN_CODE code;
  
  /* file was never open, so this should indicate success- kinda. */
  if (NULL == *snssFile)
      return SNSS_OK;
  
  if (SNSS_OPEN_WRITE == (*snssFile)->mode)
  {
    prevLoc = vfs_tell((*snssFile)->fp);
    vfs_seek((*snssFile)->fp, 0, VFS_SEEK_SET);
    
    /* write the header again to get block count correct */
    if (SNSS_OK != (code = SNSS_WriteFileHeader(*snssFile)))
      return SNSS_CLOSE_FAILED;
    
    vfs_seek((*snssFile)->fp, prevLoc, VFS_SEEK_SET);
  }
  
  vfs_close ((*snssFile)->fp);
  
  NES_FREE(*snssFile);
  *snssFile = NULL;
  
  return SNSS_OK;
}
Ejemplo n.º 3
0
off_t vfsfd_lseek(int fd, off_t offset, int whence)
{
    struct fdtab_entry *e = fdtab_get(fd);
    switch(e->type) {
    case FDTAB_TYPE_FILE:
        {
            enum vfs_seekpos vfs_whence;
            errval_t err;
            size_t retpos;

            switch(whence) {
            case SEEK_SET:
                vfs_whence = VFS_SEEK_SET;
                break;

            case SEEK_CUR:
                vfs_whence = VFS_SEEK_CUR;
                break;

            case SEEK_END:
                vfs_whence = VFS_SEEK_END;
                break;

            default:
                return -1;
            }

            err = vfs_seek((vfs_handle_t)e->handle, vfs_whence, offset);
            if(err_is_fail(err)) {
                DEBUG_ERR(err, "vfs_seek");
                return -1;
            }

            err = vfs_tell((vfs_handle_t)e->handle, &retpos);
            if(err_is_fail(err)) {
                DEBUG_ERR(err, "vfs_tell");
                return -1;
            }

            VFSFD_DEBUG("lseek(%d, %lld, %d) = %lu\n",
                         fd, offset, whence, retpos);

            return retpos;
        }
        break;

    default:
        return -1;
    }
}
Ejemplo n.º 4
0
Archivo: syscall.c Proyecto: mrb852/osm
int syscall_tell(openfile_t file) {
  int result = vfs_tell(file - 2);
  if (result < 0) {
    switch(result) {
      case VFS_UNUSABLE:
        kprintf("Error telling file's position. File system unusable.\n");
      break;
      case VFS_NOT_OPEN:
        kprintf("Error telling file's position: File not open\n");
      break;
      default:
        kprintf("Error writing file: unknown error\n");
      break;
    }

  }

  return result;
}
Ejemplo n.º 5
0
Archivo: io.c Proyecto: mrb852/osm-exam
int io_tell(openfile_t file) {
  file -= 3;
  if (!process_has_open_file(file)) return VFS_NOT_OPEN_IN_PROCESS;
  return vfs_tell(file);
}