SHARE
TWEET

Untitled

a guest Mar 20th, 2017 63 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /** Lê bytes de um arquivo criptografado aberto.
  2.  *
  3.  * @param arquivo índice para a tabela de arquivos abertos
  4.  * @param tamanho número de bytes a serem lidos
  5.  * @param buffer ponteiro para buffer onde serão armazenados os bytes lidos
  6.  * @return número de bytes lidos
  7.  */
  8. uint32_t cry_read(indice_arquivo_t arquivo, uint32_t tamanho, char *buffer) {
  9.     int i,j,b,seek;
  10.     uint32_t lidos,restante,indiceRead;
  11.     char bufferDesloc;
  12.     lidos = 0;
  13.    
  14.     if( descritor.abertos[arquivo-1].acesso == ESCRITA) return 0;
  15.    
  16.     if( descritor.abertos[arquivo-1].arquivo->tamanho == 0) return 0;
  17.  
  18.     restante = tamanho;
  19.    
  20.     j=0;
  21.     b=0;
  22.     indice = descritor.abertos[arquivo-1].arquivo->indice;
  23.     seek = descritor.abertos[arquivo-1].arquivo->posicao;
  24.     while (seek > 4096) {
  25.     indice = fat[indice];
  26.     seek -= 4096;  
  27.     }
  28.  
  29.     if( (descritor.abertos[arquivo-1].arquivo->tamanho)-(descritor.abertos[arquivo-1].arquivo->posicao) < tamanho ) return 0;
  30.    
  31.     do{
  32.         fseek(descritor.arquivo_host, (indice*BLOCO)+seek, SEEK_SET);  
  33.         for(i=0 ; i<(BLOCO-seek) ; i++) {
  34.         lidos += fread(&bufferDesloc, 1, 1, descritor.arquivo_host);
  35.         tamanho-descritor.abertos[arquivo-1].arquivo->posicao++;
  36.         buffer[b] = decryp(bufferDesloc,chave[arquivo-1]);
  37.         restante--;
  38.         if (buffer[b++] == '\0') restante = 0;
  39.         if (restante == 0) break;
  40.         }
  41.         seek = 0;
  42.         if (restante == 0) break;    
  43.         indice = fat[indice];
  44.     } while (indice != 0);
  45.    
  46. return tamanho-restante;
  47.  
  48. }
RAW Paste Data
Top