Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /** Lê bytes de um arquivo criptografado aberto.
- *
- * @param arquivo índice para a tabela de arquivos abertos
- * @param tamanho número de bytes a serem lidos
- * @param buffer ponteiro para buffer onde serão armazenados os bytes lidos
- * @return número de bytes lidos
- */
- uint32_t cry_read(indice_arquivo_t arquivo, uint32_t tamanho, char *buffer) {
- int i,j,b,seek;
- uint32_t lidos,restante,indiceRead;
- char bufferDesloc;
- lidos = 0;
- if( descritor.abertos[arquivo-1].acesso == ESCRITA) return 0;
- if( descritor.abertos[arquivo-1].arquivo->tamanho == 0) return 0;
- restante = tamanho;
- j=0;
- b=0;
- indice = descritor.abertos[arquivo-1].arquivo->indice;
- seek = descritor.abertos[arquivo-1].arquivo->posicao;
- while (seek > 4096) {
- indice = fat[indice];
- seek -= 4096;
- }
- if( (descritor.abertos[arquivo-1].arquivo->tamanho)-(descritor.abertos[arquivo-1].arquivo->posicao) < tamanho ) return 0;
- do{
- fseek(descritor.arquivo_host, (indice*BLOCO)+seek, SEEK_SET);
- for(i=0 ; i<(BLOCO-seek) ; i++) {
- lidos += fread(&bufferDesloc, 1, 1, descritor.arquivo_host);
- tamanho-descritor.abertos[arquivo-1].arquivo->posicao++;
- buffer[b] = decryp(bufferDesloc,chave[arquivo-1]);
- restante--;
- if (buffer[b++] == '\0') restante = 0;
- if (restante == 0) break;
- }
- seek = 0;
- if (restante == 0) break;
- indice = fat[indice];
- } while (indice != 0);
- return tamanho-restante;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement