mirror of
https://github.com/ProDOS-8/xHD.git
synced 2024-12-27 19:29:42 +00:00
Added check for success of file operations.
Note: As the drive 2 disk image filename is optional all access to drive 2 should trigger an I/O error on the client side.
This commit is contained in:
parent
9fd4088746
commit
413bfd6b96
@ -102,14 +102,33 @@ int main(int argc, char *argv[])
|
|||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
char * apFileData[2];
|
char *apFileData[2] = {0, 0};
|
||||||
for (int iDrive=0; iDrive<2; iDrive++)
|
for (int iDrive = 0; iDrive < 2; iDrive++)
|
||||||
{
|
{
|
||||||
|
if (apFilename[iDrive] == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
int fd = open(apFilename[iDrive], O_RDWR, S_IWRITE | S_IREAD);
|
int fd = open(apFilename[iDrive], O_RDWR, S_IWRITE | S_IREAD);
|
||||||
|
if (fd == -1)
|
||||||
|
{
|
||||||
|
printf("Err: %s - %s\n", apFilename[iDrive], strerror(errno));
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
struct stat stats;
|
struct stat stats;
|
||||||
fstat(fd, &stats);
|
if (fstat(fd, &stats) == -1)
|
||||||
|
{
|
||||||
|
printf("Err: %s - %s\n", apFilename[iDrive], strerror(errno));
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
unsigned int uFilesize = (unsigned int)stats.st_size;
|
unsigned int uFilesize = (unsigned int)stats.st_size;
|
||||||
apFileData[iDrive] = (char*) mmap(0, uFilesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
|
|
||||||
|
apFileData[iDrive] = (char*)mmap(0, uFilesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
|
||||||
|
if (apFileData[iDrive] == MAP_FAILED)
|
||||||
|
{
|
||||||
|
printf("Err: %s - %s\n", apFilename[iDrive], strerror(errno));
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
enum sp_return eResult;
|
enum sp_return eResult;
|
||||||
@ -252,7 +271,18 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
// If 4x bytes were read and the checksum passed, process request
|
// If 4x bytes were read and the checksum passed, process request
|
||||||
int iBlock = auReadBuf[1] | (auReadBuf[2] << 8);
|
int iBlock = auReadBuf[1] | (auReadBuf[2] << 8);
|
||||||
char *pDriveData = apFileData[(auReadBuf[0] >> 2) & 1];
|
int iDrive = (auReadBuf[0] >> 2) & 1;
|
||||||
|
char *pDriveData = apFileData[iDrive];
|
||||||
|
if (pDriveData == 0)
|
||||||
|
{
|
||||||
|
if (bLog)
|
||||||
|
{
|
||||||
|
printf("%d\tN\n", iDrive);
|
||||||
|
fflush(stdout);
|
||||||
|
}
|
||||||
|
// TODO: Make this an I/O error on the client side
|
||||||
|
continue;
|
||||||
|
}
|
||||||
pDriveData += iBlock << 9;
|
pDriveData += iBlock << 9;
|
||||||
|
|
||||||
// Read block
|
// Read block
|
||||||
@ -281,7 +311,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
if (bLog)
|
if (bLog)
|
||||||
{
|
{
|
||||||
printf("%d\tR %5d\r", (auReadBuf[0] >> 2) & 1, iBlock);
|
printf("%d\tR %5d\r", iDrive, iBlock);
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -308,7 +338,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
if (bLog)
|
if (bLog)
|
||||||
{
|
{
|
||||||
printf("%d\t\t\t\tW %5d\r", (auReadBuf[0] >> 2) & 1, iBlock);
|
printf("%d\t\t\t\tW %5d\r", iDrive, iBlock);
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user