Es una versión vieja, que usa el kernel de Windows 7
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes MenúCita de: string Manolo en 18 Julio 2019, 03:18 AMEh, creo que hablaba de un documento gratis
https://www.amazon.es/DHCP-Handbook-Macmillan-Technology/dp/1578701376
Cita de: Eternal Idol en 5 Julio 2019, 21:31 PMYa sabía que solo se iba a leer 512 bytes (y ya lo he arreglado). Lo que aún no logro hacer funcionar es lo que comento en el título del hilo. Tal como me respondió MAFUS con un malloc es fácil, pero podría ser que el archivo:
¿No sera demasiado copy/paste? Cada vez que usa buff es solo para leer el tamaño de un sector de 512 bytes. fatbuff es un puntero nulo asi que asumiendo que no haya otros errores esto solo puede funcionar con archivos de menos de 512 bytes.
int fat32_open_file(uint8_t* filename, uint8_t* buff)
{
if (!hd_exists() && !filename)
return 1;
hd_read(start_of_root, FAT32_FILES_PER_DIRECTORY * sizeof(struct DirectoryEntry), (uint8_t*)&drce[0]);
for (int i = 0; i < FAT32_FILES_PER_DIRECTORY; ++i) {
if (drce[i].file_name[0] == FAT32_NO_FILES)
break;
uint8_t* fatbuff = 0;
uint8_t fil[12];
fat2human(drce[i].file_name, fil);
trimName(fil, 11);
if (strcmp((char*)fil, (char*)filename) == 0) {
uint8_t fcluster = ((uint32_t)drce[i].cluster_number_hi) << 16 | ((uint32_t)drce[i].cluster_number_lo);
int32_t ncluster = fcluster;
int32_t file_size = drce[i].file_size;
kputs("\nFile content: \n");
/* 1 sector file (less than 512 bytes) */
if (file_size < 512) {
hd_read(fcluster, 512, buff);
buff[file_size] = '\0';
//kputs("%s", (char*)buff);
}
while (file_size > 0) {
uint32_t fsect = start_of_data + bpb.sectors_per_cluster * (ncluster - 2);
uint32_t sector_offset = 0;
for (; file_size > 0; file_size -= 512) {
hd_read(fsect + sector_offset, 512, buff);
buff[file_size > 512 ? 512 : file_size] = '\0';
//kputs("%s", (char*)buff);
if (++sector_offset > bpb.sectors_per_cluster)
break;
}
uint32_t fsectcurrentcl = ncluster / (512 / sizeof(uint32_t));
hd_read(fat_start + fsectcurrentcl, 512, fatbuff);
uint32_t foffsectcurrentcl = ncluster % (512 / sizeof (uint32_t));
ncluster = ((uint32_t*)&fatbuff)[foffsectcurrentcl] & 0x0FFFFFFF;
}
return 0;
}
}
kputs("\nFile %s not found\n", filename);
return 1;
}
uint8_t fileb[1024];
fat32_open_file(buff, fileb);