mirror of
https://github.com/aaru-dps/libaaruformat.git
synced 2025-12-16 11:14:39 +00:00
General refactor and cleanup.
This commit is contained in:
@@ -23,22 +23,15 @@
|
||||
|
||||
#include <aaruformat.h>
|
||||
|
||||
int identify(char* path);
|
||||
int info(char* path);
|
||||
char* byte_array_to_hex_string(const unsigned char* array, int array_size);
|
||||
int read(unsigned long long sector_no, char* path);
|
||||
int printhex(unsigned char* array, unsigned int length, int width, bool color);
|
||||
int read_long(unsigned long long sector_no, char* path);
|
||||
int verify(char* path);
|
||||
int verify_sectors(char* path);
|
||||
bool check_cd_sector_channel(CdEccContext* context,
|
||||
uint8_t* sector,
|
||||
bool* unknown,
|
||||
bool* has_edc,
|
||||
bool* edc_correct,
|
||||
bool* has_ecc_p,
|
||||
bool* ecc_p_correct,
|
||||
bool* has_ecc_q,
|
||||
bool* ecc_q_correct);
|
||||
int identify(char *path);
|
||||
int info(char *path);
|
||||
char *byte_array_to_hex_string(const unsigned char *array, int array_size);
|
||||
int read(unsigned long long sector_no, char *path);
|
||||
int printhex(unsigned char *array, unsigned int length, int width, bool color);
|
||||
int read_long(unsigned long long sector_no, char *path);
|
||||
int verify(char *path);
|
||||
int verify_sectors(char *path);
|
||||
bool check_cd_sector_channel(CdEccContext *context, uint8_t *sector, bool *unknown, bool *has_edc, bool *edc_correct,
|
||||
bool *has_ecc_p, bool *ecc_p_correct, bool *has_ecc_q, bool *ecc_q_correct);
|
||||
|
||||
#endif // LIBAARUFORMAT_TOOL_AARUFORMATTOOL_H_
|
||||
#endif // LIBAARUFORMAT_TOOL_AARUFORMATTOOL_H_
|
||||
|
||||
@@ -22,15 +22,8 @@
|
||||
|
||||
#include <aaruformat.h>
|
||||
|
||||
bool check_cd_sector_channel(CdEccContext* context,
|
||||
uint8_t* sector,
|
||||
bool* unknown,
|
||||
bool* has_edc,
|
||||
bool* edc_correct,
|
||||
bool* has_ecc_p,
|
||||
bool* ecc_p_correct,
|
||||
bool* has_ecc_q,
|
||||
bool* ecc_q_correct)
|
||||
bool check_cd_sector_channel(CdEccContext *context, uint8_t *sector, bool *unknown, bool *has_edc, bool *edc_correct,
|
||||
bool *has_ecc_p, bool *ecc_p_correct, bool *has_ecc_q, bool *ecc_q_correct)
|
||||
{
|
||||
int i;
|
||||
uint32_t storedEdc, edc, calculatedEdc;
|
||||
@@ -53,15 +46,12 @@ bool check_cd_sector_channel(CdEccContext* context,
|
||||
return false;
|
||||
}
|
||||
|
||||
if((sector[0x00F] & 0x03) == 0x00) // Mode 0
|
||||
if((sector[0x00F] & 0x03) == 0x00) // Mode 0
|
||||
{
|
||||
for(i = 0x010; i < 0x930; i++)
|
||||
if(sector[i] != 0x00)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"Mode 0 sector with error at address: %2X:%2X:%2X.\n",
|
||||
sector[0x00C],
|
||||
sector[0x00D],
|
||||
fprintf(stderr, "Mode 0 sector with error at address: %2X:%2X:%2X.\n", sector[0x00C], sector[0x00D],
|
||||
sector[0x00E]);
|
||||
return false;
|
||||
}
|
||||
@@ -69,18 +59,15 @@ bool check_cd_sector_channel(CdEccContext* context,
|
||||
return true;
|
||||
}
|
||||
|
||||
if((sector[0x00F] & 0x03) == 0x01) // Mode 1
|
||||
if((sector[0x00F] & 0x03) == 0x01) // Mode 1
|
||||
{
|
||||
if(sector[0x814] != 0x00 ||
|
||||
// reserved (8 bytes)
|
||||
sector[0x815] != 0x00 || sector[0x816] != 0x00 || sector[0x817] != 0x00 || sector[0x818] != 0x00 ||
|
||||
sector[0x819] != 0x00 || sector[0x81A] != 0x00 || sector[0x81B] != 0x00)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"Mode 1 with data in reserved bytes at address: %2X:%2X:%2X.\n",
|
||||
sector[0x00C],
|
||||
sector[0x00D],
|
||||
sector[0x00E]);
|
||||
fprintf(stderr, "Mode 1 with data in reserved bytes at address: %2X:%2X:%2X.\n", sector[0x00C],
|
||||
sector[0x00D], sector[0x00E]);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -91,8 +78,8 @@ bool check_cd_sector_channel(CdEccContext* context,
|
||||
*ecc_p_correct = aaruf_ecc_cd_check(context, sector, sector, 86, 24, 2, 86, sector, 0xC, 0x10, 0x81C);
|
||||
*ecc_q_correct = aaruf_ecc_cd_check(context, sector, sector, 52, 43, 86, 88, sector, 0xC, 0x10, 0x81C + 0xAC);
|
||||
|
||||
storedEdc =
|
||||
(sector[0x813] << 24) + (sector[0x812] << 16) + (sector[0x811] << 8) + sector[0x810]; // TODO: Check casting
|
||||
storedEdc = (sector[0x813] << 24) + (sector[0x812] << 16) + (sector[0x811] << 8) +
|
||||
sector[0x810]; // TODO: Check casting
|
||||
edc = 0;
|
||||
size = 0x810;
|
||||
pos = 0;
|
||||
@@ -103,47 +90,33 @@ bool check_cd_sector_channel(CdEccContext* context,
|
||||
|
||||
if(!*edc_correct)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"Mode 1 sector at address: %2X:%2X:%2X, got CRC 0x%8X expected 0x%8X\n",
|
||||
sector[0x00C],
|
||||
sector[0x00D],
|
||||
sector[0x00E],
|
||||
calculatedEdc,
|
||||
storedEdc);
|
||||
fprintf(stderr, "Mode 1 sector at address: %2X:%2X:%2X, got CRC 0x%8X expected 0x%8X\n", sector[0x00C],
|
||||
sector[0x00D], sector[0x00E], calculatedEdc, storedEdc);
|
||||
}
|
||||
|
||||
if(!*ecc_p_correct)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"Mode 1 sector at address: %2X:%2X:%2X, fails ECC P check.\n",
|
||||
sector[0x00C],
|
||||
sector[0x00D],
|
||||
fprintf(stderr, "Mode 1 sector at address: %2X:%2X:%2X, fails ECC P check.\n", sector[0x00C], sector[0x00D],
|
||||
sector[0x00E]);
|
||||
}
|
||||
|
||||
if(!*ecc_q_correct)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"Mode 1 sector at address: %2X:%2X:%2X, fails ECC Q check.\n",
|
||||
sector[0x00C],
|
||||
sector[0x00D],
|
||||
fprintf(stderr, "Mode 1 sector at address: %2X:%2X:%2X, fails ECC Q check.\n", sector[0x00C], sector[0x00D],
|
||||
sector[0x00E]);
|
||||
}
|
||||
|
||||
return *edc_correct && *ecc_p_correct && *ecc_q_correct;
|
||||
}
|
||||
|
||||
if((sector[0x00F] & 0x03) == 0x02) // Mode 2
|
||||
if((sector[0x00F] & 0x03) == 0x02) // Mode 2
|
||||
{
|
||||
if((sector[0x012] & 0x20) == 0x20) // mode 2 form 2
|
||||
if((sector[0x012] & 0x20) == 0x20) // mode 2 form 2
|
||||
{
|
||||
if(sector[0x010] != sector[0x014] || sector[0x011] != sector[0x015] || sector[0x012] != sector[0x016] ||
|
||||
sector[0x013] != sector[0x017])
|
||||
fprintf(stderr,
|
||||
"Subheader copies differ in mode 2 form 2 sector at address: %2X:%2X:%2X",
|
||||
sector[0x00C],
|
||||
sector[0x00D],
|
||||
sector[0x00E]);
|
||||
fprintf(stderr, "Subheader copies differ in mode 2 form 2 sector at address: %2X:%2X:%2X",
|
||||
sector[0x00C], sector[0x00D], sector[0x00E]);
|
||||
|
||||
storedEdc = sector[0x91C];
|
||||
|
||||
@@ -162,13 +135,8 @@ bool check_cd_sector_channel(CdEccContext* context,
|
||||
|
||||
if(!*edc_correct)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"Mode 2 sector at address: %2X:%2X:%2X, got CRC 0x%8X expected 0x%8X\n",
|
||||
sector[0x00C],
|
||||
sector[0x00D],
|
||||
sector[0x00E],
|
||||
calculatedEdc,
|
||||
storedEdc);
|
||||
fprintf(stderr, "Mode 2 sector at address: %2X:%2X:%2X, got CRC 0x%8X expected 0x%8X\n", sector[0x00C],
|
||||
sector[0x00D], sector[0x00E], calculatedEdc, storedEdc);
|
||||
}
|
||||
|
||||
return *edc_correct;
|
||||
@@ -179,7 +147,7 @@ bool check_cd_sector_channel(CdEccContext* context,
|
||||
*ecc_q_correct =
|
||||
aaruf_ecc_cd_check(context, zeroaddress, sector, 52, 43, 86, 88, sector, 0, 0x10, 0x81C + 0xAC);
|
||||
|
||||
storedEdc = sector[0x818]; // TODO: Check cast
|
||||
storedEdc = sector[0x818]; // TODO: Check cast
|
||||
edc = 0;
|
||||
size = 0x808;
|
||||
pos = 0x10;
|
||||
@@ -190,41 +158,26 @@ bool check_cd_sector_channel(CdEccContext* context,
|
||||
|
||||
if(!*edc_correct)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"Mode 2 sector at address: %2X:%2X:%2X, got CRC 0x%8X expected 0x%8X\n",
|
||||
sector[0x00C],
|
||||
sector[0x00D],
|
||||
sector[0x00E],
|
||||
calculatedEdc,
|
||||
storedEdc);
|
||||
fprintf(stderr, "Mode 2 sector at address: %2X:%2X:%2X, got CRC 0x%8X expected 0x%8X\n", sector[0x00C],
|
||||
sector[0x00D], sector[0x00E], calculatedEdc, storedEdc);
|
||||
}
|
||||
|
||||
if(!*ecc_p_correct)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"Mode 2 sector at address: %2X:%2X:%2X, fails ECC P check.\n",
|
||||
sector[0x00C],
|
||||
sector[0x00D],
|
||||
fprintf(stderr, "Mode 2 sector at address: %2X:%2X:%2X, fails ECC P check.\n", sector[0x00C], sector[0x00D],
|
||||
sector[0x00E]);
|
||||
}
|
||||
|
||||
if(!*ecc_q_correct)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"Mode 2 sector at address: %2X:%2X:%2X, fails ECC Q check.\n",
|
||||
sector[0x00C],
|
||||
sector[0x00D],
|
||||
fprintf(stderr, "Mode 2 sector at address: %2X:%2X:%2X, fails ECC Q check.\n", sector[0x00C], sector[0x00D],
|
||||
sector[0x00E]);
|
||||
}
|
||||
|
||||
return *edc_correct && *ecc_p_correct && *ecc_q_correct;
|
||||
}
|
||||
|
||||
fprintf(stderr,
|
||||
"Unknown mode %d sector at address: %2X:%2X:%2X",
|
||||
sector[0x00F],
|
||||
sector[0x00C],
|
||||
sector[0x00D],
|
||||
fprintf(stderr, "Unknown mode %d sector at address: %2X:%2X:%2X", sector[0x00F], sector[0x00C], sector[0x00D],
|
||||
sector[0x00E]);
|
||||
|
||||
return false;
|
||||
|
||||
@@ -22,9 +22,9 @@
|
||||
|
||||
#include "aaruformattool.h"
|
||||
|
||||
char* byte_array_to_hex_string(const unsigned char* array, int array_size)
|
||||
char *byte_array_to_hex_string(const unsigned char *array, int array_size)
|
||||
{
|
||||
char* hex_string = NULL;
|
||||
char *hex_string = NULL;
|
||||
int j;
|
||||
int i;
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
#include <aaruformat.h>
|
||||
|
||||
int identify(char* path)
|
||||
int identify(char *path)
|
||||
{
|
||||
int ret;
|
||||
|
||||
|
||||
229
tool/info.c
229
tool/info.c
@@ -25,14 +25,14 @@
|
||||
|
||||
#include "aaruformattool.h"
|
||||
|
||||
int info(char* path)
|
||||
int info(char *path)
|
||||
{
|
||||
aaruformatContext* ctx;
|
||||
char* strBuffer;
|
||||
aaruformatContext *ctx;
|
||||
char *strBuffer;
|
||||
UErrorCode u_error_code;
|
||||
uint i, j;
|
||||
mediaTagEntry* mediaTag;
|
||||
mediaTagEntry* tmpMediaTag;
|
||||
mediaTagEntry *mediaTag;
|
||||
mediaTagEntry *tmpMediaTag;
|
||||
|
||||
ctx = aaruf_open(path);
|
||||
|
||||
@@ -43,14 +43,14 @@ int info(char* path)
|
||||
}
|
||||
|
||||
printf("AaruFormat context information:\n");
|
||||
printf("Magic number: %8.8s\n", (char*)&ctx->magic);
|
||||
printf("Magic number: %8.8s\n", (char *)&ctx->magic);
|
||||
printf("Library version: %d.%d\n", ctx->libraryMajorVersion, ctx->libraryMinorVersion);
|
||||
printf("AaruFormat header:\n");
|
||||
printf("\tIdentifier: %8.8s\n", (char*)&ctx->header.identifier);
|
||||
printf("\tIdentifier: %8.8s\n", (char *)&ctx->header.identifier);
|
||||
|
||||
strBuffer = malloc(65);
|
||||
memset(strBuffer, 0, 65);
|
||||
ucnv_convert(NULL, "UTF-16LE", strBuffer, 64, (const char*)ctx->header.application, 64, &u_error_code);
|
||||
ucnv_convert(NULL, "UTF-16LE", strBuffer, 64, (const char *)ctx->header.application, 64, &u_error_code);
|
||||
if(u_error_code == U_ZERO_ERROR) printf("\tApplication: %s\n", strBuffer);
|
||||
free(strBuffer);
|
||||
|
||||
@@ -88,30 +88,23 @@ int info(char* path)
|
||||
if(ctx->sectorPrefixDdt != NULL) printf("Sector suffix DDT has been read to memory.\n");
|
||||
|
||||
if(ctx->geometryBlock.identifier == GeometryBlock)
|
||||
printf("Media has %d cylinders, %d heads and %d sectors per track.\n",
|
||||
ctx->geometryBlock.cylinders,
|
||||
ctx->geometryBlock.heads,
|
||||
ctx->geometryBlock.sectorsPerTrack);
|
||||
printf("Media has %d cylinders, %d heads and %d sectors per track.\n", ctx->geometryBlock.cylinders,
|
||||
ctx->geometryBlock.heads, ctx->geometryBlock.sectorsPerTrack);
|
||||
|
||||
if(ctx->metadataBlockHeader.identifier == MetadataBlock)
|
||||
{
|
||||
printf("Metadata block:\n");
|
||||
if(ctx->metadataBlockHeader.mediaSequence > 0)
|
||||
printf("\tMedia is no. %d in a set of %d media\n",
|
||||
ctx->metadataBlockHeader.mediaSequence,
|
||||
printf("\tMedia is no. %d in a set of %d media\n", ctx->metadataBlockHeader.mediaSequence,
|
||||
ctx->metadataBlockHeader.lastMediaSequence);
|
||||
|
||||
if(ctx->metadataBlockHeader.creatorLength > 0)
|
||||
{
|
||||
strBuffer = malloc(ctx->metadataBlockHeader.creatorLength + 1);
|
||||
memset(strBuffer, 0, ctx->metadataBlockHeader.creatorLength + 1);
|
||||
ucnv_convert(NULL,
|
||||
"UTF-16LE",
|
||||
strBuffer,
|
||||
(int)ctx->metadataBlockHeader.creatorLength,
|
||||
(char*)(ctx->metadataBlock + ctx->metadataBlockHeader.creatorOffset),
|
||||
(int)ctx->metadataBlockHeader.creatorLength,
|
||||
&u_error_code);
|
||||
ucnv_convert(NULL, "UTF-16LE", strBuffer, (int)ctx->metadataBlockHeader.creatorLength,
|
||||
(char *)(ctx->metadataBlock + ctx->metadataBlockHeader.creatorOffset),
|
||||
(int)ctx->metadataBlockHeader.creatorLength, &u_error_code);
|
||||
printf("\tCreator: %s\n", strBuffer);
|
||||
free(strBuffer);
|
||||
}
|
||||
@@ -120,13 +113,9 @@ int info(char* path)
|
||||
{
|
||||
strBuffer = malloc(ctx->metadataBlockHeader.commentsLength + 1);
|
||||
memset(strBuffer, 0, ctx->metadataBlockHeader.commentsLength + 1);
|
||||
ucnv_convert(NULL,
|
||||
"UTF-16LE",
|
||||
strBuffer,
|
||||
(int)ctx->metadataBlockHeader.commentsLength,
|
||||
(char*)(ctx->metadataBlock + ctx->metadataBlockHeader.commentsOffset),
|
||||
(int)ctx->metadataBlockHeader.commentsLength,
|
||||
&u_error_code);
|
||||
ucnv_convert(NULL, "UTF-16LE", strBuffer, (int)ctx->metadataBlockHeader.commentsLength,
|
||||
(char *)(ctx->metadataBlock + ctx->metadataBlockHeader.commentsOffset),
|
||||
(int)ctx->metadataBlockHeader.commentsLength, &u_error_code);
|
||||
printf("\tCreator: %s\n", strBuffer);
|
||||
free(strBuffer);
|
||||
}
|
||||
@@ -135,13 +124,9 @@ int info(char* path)
|
||||
{
|
||||
strBuffer = malloc(ctx->metadataBlockHeader.mediaTitleLength + 1);
|
||||
memset(strBuffer, 0, ctx->metadataBlockHeader.mediaTitleLength + 1);
|
||||
ucnv_convert(NULL,
|
||||
"UTF-16LE",
|
||||
strBuffer,
|
||||
(int)ctx->metadataBlockHeader.mediaTitleLength,
|
||||
(char*)(ctx->metadataBlock + ctx->metadataBlockHeader.mediaTitleOffset),
|
||||
(int)ctx->metadataBlockHeader.mediaTitleLength,
|
||||
&u_error_code);
|
||||
ucnv_convert(NULL, "UTF-16LE", strBuffer, (int)ctx->metadataBlockHeader.mediaTitleLength,
|
||||
(char *)(ctx->metadataBlock + ctx->metadataBlockHeader.mediaTitleOffset),
|
||||
(int)ctx->metadataBlockHeader.mediaTitleLength, &u_error_code);
|
||||
printf("\tCreator: %s\n", strBuffer);
|
||||
free(strBuffer);
|
||||
}
|
||||
@@ -150,13 +135,9 @@ int info(char* path)
|
||||
{
|
||||
strBuffer = malloc(ctx->metadataBlockHeader.mediaManufacturerLength + 1);
|
||||
memset(strBuffer, 0, ctx->metadataBlockHeader.mediaManufacturerLength + 1);
|
||||
ucnv_convert(NULL,
|
||||
"UTF-16LE",
|
||||
strBuffer,
|
||||
(int)ctx->metadataBlockHeader.mediaManufacturerLength,
|
||||
(char*)(ctx->metadataBlock + ctx->metadataBlockHeader.mediaManufacturerOffset),
|
||||
(int)ctx->metadataBlockHeader.mediaManufacturerLength,
|
||||
&u_error_code);
|
||||
ucnv_convert(NULL, "UTF-16LE", strBuffer, (int)ctx->metadataBlockHeader.mediaManufacturerLength,
|
||||
(char *)(ctx->metadataBlock + ctx->metadataBlockHeader.mediaManufacturerOffset),
|
||||
(int)ctx->metadataBlockHeader.mediaManufacturerLength, &u_error_code);
|
||||
printf("\tCreator: %s\n", strBuffer);
|
||||
free(strBuffer);
|
||||
}
|
||||
@@ -165,13 +146,9 @@ int info(char* path)
|
||||
{
|
||||
strBuffer = malloc(ctx->metadataBlockHeader.mediaModelLength + 1);
|
||||
memset(strBuffer, 0, ctx->metadataBlockHeader.mediaModelLength + 1);
|
||||
ucnv_convert(NULL,
|
||||
"UTF-16LE",
|
||||
strBuffer,
|
||||
(int)ctx->metadataBlockHeader.mediaModelLength,
|
||||
(char*)(ctx->metadataBlock + ctx->metadataBlockHeader.mediaModelOffset),
|
||||
(int)ctx->metadataBlockHeader.mediaModelLength,
|
||||
&u_error_code);
|
||||
ucnv_convert(NULL, "UTF-16LE", strBuffer, (int)ctx->metadataBlockHeader.mediaModelLength,
|
||||
(char *)(ctx->metadataBlock + ctx->metadataBlockHeader.mediaModelOffset),
|
||||
(int)ctx->metadataBlockHeader.mediaModelLength, &u_error_code);
|
||||
printf("\tCreator: %s\n", strBuffer);
|
||||
free(strBuffer);
|
||||
}
|
||||
@@ -180,13 +157,9 @@ int info(char* path)
|
||||
{
|
||||
strBuffer = malloc(ctx->metadataBlockHeader.mediaSerialNumberLength + 1);
|
||||
memset(strBuffer, 0, ctx->metadataBlockHeader.mediaSerialNumberLength + 1);
|
||||
ucnv_convert(NULL,
|
||||
"UTF-16LE",
|
||||
strBuffer,
|
||||
(int)ctx->metadataBlockHeader.mediaSerialNumberLength,
|
||||
(char*)(ctx->metadataBlock + ctx->metadataBlockHeader.mediaSerialNumberOffset),
|
||||
(int)ctx->metadataBlockHeader.mediaSerialNumberLength,
|
||||
&u_error_code);
|
||||
ucnv_convert(NULL, "UTF-16LE", strBuffer, (int)ctx->metadataBlockHeader.mediaSerialNumberLength,
|
||||
(char *)(ctx->metadataBlock + ctx->metadataBlockHeader.mediaSerialNumberOffset),
|
||||
(int)ctx->metadataBlockHeader.mediaSerialNumberLength, &u_error_code);
|
||||
printf("\tCreator: %s\n", strBuffer);
|
||||
free(strBuffer);
|
||||
}
|
||||
@@ -195,13 +168,9 @@ int info(char* path)
|
||||
{
|
||||
strBuffer = malloc(ctx->metadataBlockHeader.mediaBarcodeLength + 1);
|
||||
memset(strBuffer, 0, ctx->metadataBlockHeader.mediaBarcodeLength + 1);
|
||||
ucnv_convert(NULL,
|
||||
"UTF-16LE",
|
||||
strBuffer,
|
||||
(int)ctx->metadataBlockHeader.mediaBarcodeLength,
|
||||
(char*)(ctx->metadataBlock + ctx->metadataBlockHeader.mediaBarcodeOffset),
|
||||
(int)ctx->metadataBlockHeader.mediaBarcodeLength,
|
||||
&u_error_code);
|
||||
ucnv_convert(NULL, "UTF-16LE", strBuffer, (int)ctx->metadataBlockHeader.mediaBarcodeLength,
|
||||
(char *)(ctx->metadataBlock + ctx->metadataBlockHeader.mediaBarcodeOffset),
|
||||
(int)ctx->metadataBlockHeader.mediaBarcodeLength, &u_error_code);
|
||||
printf("\tCreator: %s\n", strBuffer);
|
||||
free(strBuffer);
|
||||
}
|
||||
@@ -210,13 +179,9 @@ int info(char* path)
|
||||
{
|
||||
strBuffer = malloc(ctx->metadataBlockHeader.mediaPartNumberLength + 1);
|
||||
memset(strBuffer, 0, ctx->metadataBlockHeader.mediaPartNumberLength + 1);
|
||||
ucnv_convert(NULL,
|
||||
"UTF-16LE",
|
||||
strBuffer,
|
||||
(int)ctx->metadataBlockHeader.mediaPartNumberLength,
|
||||
(char*)(ctx->metadataBlock + ctx->metadataBlockHeader.mediaPartNumberOffset),
|
||||
(int)ctx->metadataBlockHeader.mediaPartNumberLength,
|
||||
&u_error_code);
|
||||
ucnv_convert(NULL, "UTF-16LE", strBuffer, (int)ctx->metadataBlockHeader.mediaPartNumberLength,
|
||||
(char *)(ctx->metadataBlock + ctx->metadataBlockHeader.mediaPartNumberOffset),
|
||||
(int)ctx->metadataBlockHeader.mediaPartNumberLength, &u_error_code);
|
||||
printf("\tCreator: %s\n", strBuffer);
|
||||
free(strBuffer);
|
||||
}
|
||||
@@ -225,13 +190,9 @@ int info(char* path)
|
||||
{
|
||||
strBuffer = malloc(ctx->metadataBlockHeader.driveManufacturerLength + 1);
|
||||
memset(strBuffer, 0, ctx->metadataBlockHeader.driveManufacturerLength + 1);
|
||||
ucnv_convert(NULL,
|
||||
"UTF-16LE",
|
||||
strBuffer,
|
||||
(int)ctx->metadataBlockHeader.driveManufacturerLength,
|
||||
(char*)(ctx->metadataBlock + ctx->metadataBlockHeader.driveManufacturerOffset),
|
||||
(int)ctx->metadataBlockHeader.driveManufacturerLength,
|
||||
&u_error_code);
|
||||
ucnv_convert(NULL, "UTF-16LE", strBuffer, (int)ctx->metadataBlockHeader.driveManufacturerLength,
|
||||
(char *)(ctx->metadataBlock + ctx->metadataBlockHeader.driveManufacturerOffset),
|
||||
(int)ctx->metadataBlockHeader.driveManufacturerLength, &u_error_code);
|
||||
printf("\tCreator: %s\n", strBuffer);
|
||||
free(strBuffer);
|
||||
}
|
||||
@@ -240,13 +201,9 @@ int info(char* path)
|
||||
{
|
||||
strBuffer = malloc(ctx->metadataBlockHeader.driveModelLength + 1);
|
||||
memset(strBuffer, 0, ctx->metadataBlockHeader.driveModelLength + 1);
|
||||
ucnv_convert(NULL,
|
||||
"UTF-16LE",
|
||||
strBuffer,
|
||||
(int)ctx->metadataBlockHeader.driveModelLength,
|
||||
(char*)(ctx->metadataBlock + ctx->metadataBlockHeader.driveModelOffset),
|
||||
(int)ctx->metadataBlockHeader.driveModelLength,
|
||||
&u_error_code);
|
||||
ucnv_convert(NULL, "UTF-16LE", strBuffer, (int)ctx->metadataBlockHeader.driveModelLength,
|
||||
(char *)(ctx->metadataBlock + ctx->metadataBlockHeader.driveModelOffset),
|
||||
(int)ctx->metadataBlockHeader.driveModelLength, &u_error_code);
|
||||
printf("\tCreator: %s\n", strBuffer);
|
||||
free(strBuffer);
|
||||
}
|
||||
@@ -255,13 +212,9 @@ int info(char* path)
|
||||
{
|
||||
strBuffer = malloc(ctx->metadataBlockHeader.driveSerialNumberLength + 1);
|
||||
memset(strBuffer, 0, ctx->metadataBlockHeader.driveSerialNumberLength + 1);
|
||||
ucnv_convert(NULL,
|
||||
"UTF-16LE",
|
||||
strBuffer,
|
||||
(int)ctx->metadataBlockHeader.driveSerialNumberLength,
|
||||
(char*)(ctx->metadataBlock + ctx->metadataBlockHeader.driveSerialNumberOffset),
|
||||
(int)ctx->metadataBlockHeader.driveSerialNumberLength,
|
||||
&u_error_code);
|
||||
ucnv_convert(NULL, "UTF-16LE", strBuffer, (int)ctx->metadataBlockHeader.driveSerialNumberLength,
|
||||
(char *)(ctx->metadataBlock + ctx->metadataBlockHeader.driveSerialNumberOffset),
|
||||
(int)ctx->metadataBlockHeader.driveSerialNumberLength, &u_error_code);
|
||||
printf("\tCreator: %s\n", strBuffer);
|
||||
free(strBuffer);
|
||||
}
|
||||
@@ -270,13 +223,9 @@ int info(char* path)
|
||||
{
|
||||
strBuffer = malloc(ctx->metadataBlockHeader.driveFirmwareRevisionLength + 1);
|
||||
memset(strBuffer, 0, ctx->metadataBlockHeader.driveFirmwareRevisionLength + 1);
|
||||
ucnv_convert(NULL,
|
||||
"UTF-16LE",
|
||||
strBuffer,
|
||||
(int)ctx->metadataBlockHeader.driveFirmwareRevisionLength,
|
||||
(char*)(ctx->metadataBlock + ctx->metadataBlockHeader.driveFirmwareRevisionOffset),
|
||||
(int)ctx->metadataBlockHeader.driveFirmwareRevisionLength,
|
||||
&u_error_code);
|
||||
ucnv_convert(NULL, "UTF-16LE", strBuffer, (int)ctx->metadataBlockHeader.driveFirmwareRevisionLength,
|
||||
(char *)(ctx->metadataBlock + ctx->metadataBlockHeader.driveFirmwareRevisionOffset),
|
||||
(int)ctx->metadataBlockHeader.driveFirmwareRevisionLength, &u_error_code);
|
||||
printf("\tCreator: %s\n", strBuffer);
|
||||
free(strBuffer);
|
||||
}
|
||||
@@ -319,13 +268,10 @@ int info(char* path)
|
||||
{
|
||||
strBuffer = malloc(ctx->dumpHardwareEntriesWithData[i].entry.manufacturerLength + 1);
|
||||
memset(strBuffer, 0, ctx->dumpHardwareEntriesWithData[i].entry.manufacturerLength + 1);
|
||||
ucnv_convert(NULL,
|
||||
"UTF-8",
|
||||
strBuffer,
|
||||
ucnv_convert(NULL, "UTF-8", strBuffer,
|
||||
(int)ctx->dumpHardwareEntriesWithData[i].entry.manufacturerLength,
|
||||
(char*)(ctx->dumpHardwareEntriesWithData[i].manufacturer),
|
||||
(int)ctx->dumpHardwareEntriesWithData[i].entry.manufacturerLength,
|
||||
&u_error_code);
|
||||
(char *)(ctx->dumpHardwareEntriesWithData[i].manufacturer),
|
||||
(int)ctx->dumpHardwareEntriesWithData[i].entry.manufacturerLength, &u_error_code);
|
||||
printf("\t\tManufacturer: %s\n", strBuffer);
|
||||
free(strBuffer);
|
||||
}
|
||||
@@ -334,13 +280,9 @@ int info(char* path)
|
||||
{
|
||||
strBuffer = malloc(ctx->dumpHardwareEntriesWithData[i].entry.modelLength + 1);
|
||||
memset(strBuffer, 0, ctx->dumpHardwareEntriesWithData[i].entry.modelLength + 1);
|
||||
ucnv_convert(NULL,
|
||||
"UTF-8",
|
||||
strBuffer,
|
||||
(int)ctx->dumpHardwareEntriesWithData[i].entry.modelLength,
|
||||
(char*)(ctx->dumpHardwareEntriesWithData[i].model),
|
||||
(int)ctx->dumpHardwareEntriesWithData[i].entry.modelLength,
|
||||
&u_error_code);
|
||||
ucnv_convert(NULL, "UTF-8", strBuffer, (int)ctx->dumpHardwareEntriesWithData[i].entry.modelLength,
|
||||
(char *)(ctx->dumpHardwareEntriesWithData[i].model),
|
||||
(int)ctx->dumpHardwareEntriesWithData[i].entry.modelLength, &u_error_code);
|
||||
printf("\t\tModel: %s\n", strBuffer);
|
||||
free(strBuffer);
|
||||
}
|
||||
@@ -349,13 +291,9 @@ int info(char* path)
|
||||
{
|
||||
strBuffer = malloc(ctx->dumpHardwareEntriesWithData[i].entry.revisionLength + 1);
|
||||
memset(strBuffer, 0, ctx->dumpHardwareEntriesWithData[i].entry.revisionLength + 1);
|
||||
ucnv_convert(NULL,
|
||||
"UTF-8",
|
||||
strBuffer,
|
||||
(int)ctx->dumpHardwareEntriesWithData[i].entry.revisionLength,
|
||||
(char*)(ctx->dumpHardwareEntriesWithData[i].revision),
|
||||
(int)ctx->dumpHardwareEntriesWithData[i].entry.revisionLength,
|
||||
&u_error_code);
|
||||
ucnv_convert(NULL, "UTF-8", strBuffer, (int)ctx->dumpHardwareEntriesWithData[i].entry.revisionLength,
|
||||
(char *)(ctx->dumpHardwareEntriesWithData[i].revision),
|
||||
(int)ctx->dumpHardwareEntriesWithData[i].entry.revisionLength, &u_error_code);
|
||||
printf("\t\tRevision: %s\n", strBuffer);
|
||||
free(strBuffer);
|
||||
}
|
||||
@@ -364,13 +302,9 @@ int info(char* path)
|
||||
{
|
||||
strBuffer = malloc(ctx->dumpHardwareEntriesWithData[i].entry.firmwareLength + 1);
|
||||
memset(strBuffer, 0, ctx->dumpHardwareEntriesWithData[i].entry.firmwareLength + 1);
|
||||
ucnv_convert(NULL,
|
||||
"UTF-8",
|
||||
strBuffer,
|
||||
(int)ctx->dumpHardwareEntriesWithData[i].entry.firmwareLength,
|
||||
(char*)(ctx->dumpHardwareEntriesWithData[i].firmware),
|
||||
(int)ctx->dumpHardwareEntriesWithData[i].entry.firmwareLength,
|
||||
&u_error_code);
|
||||
ucnv_convert(NULL, "UTF-8", strBuffer, (int)ctx->dumpHardwareEntriesWithData[i].entry.firmwareLength,
|
||||
(char *)(ctx->dumpHardwareEntriesWithData[i].firmware),
|
||||
(int)ctx->dumpHardwareEntriesWithData[i].entry.firmwareLength, &u_error_code);
|
||||
printf("\t\tFirmware version: %s\n", strBuffer);
|
||||
free(strBuffer);
|
||||
}
|
||||
@@ -379,13 +313,9 @@ int info(char* path)
|
||||
{
|
||||
strBuffer = malloc(ctx->dumpHardwareEntriesWithData[i].entry.serialLength + 1);
|
||||
memset(strBuffer, 0, ctx->dumpHardwareEntriesWithData[i].entry.serialLength + 1);
|
||||
ucnv_convert(NULL,
|
||||
"UTF-8",
|
||||
strBuffer,
|
||||
(int)ctx->dumpHardwareEntriesWithData[i].entry.serialLength,
|
||||
(char*)(ctx->dumpHardwareEntriesWithData[i].serial),
|
||||
(int)ctx->dumpHardwareEntriesWithData[i].entry.serialLength,
|
||||
&u_error_code);
|
||||
ucnv_convert(NULL, "UTF-8", strBuffer, (int)ctx->dumpHardwareEntriesWithData[i].entry.serialLength,
|
||||
(char *)(ctx->dumpHardwareEntriesWithData[i].serial),
|
||||
(int)ctx->dumpHardwareEntriesWithData[i].entry.serialLength, &u_error_code);
|
||||
printf("\t\tSerial number: %s\n", strBuffer);
|
||||
free(strBuffer);
|
||||
}
|
||||
@@ -394,13 +324,10 @@ int info(char* path)
|
||||
{
|
||||
strBuffer = malloc(ctx->dumpHardwareEntriesWithData[i].entry.softwareNameLength + 1);
|
||||
memset(strBuffer, 0, ctx->dumpHardwareEntriesWithData[i].entry.softwareNameLength + 1);
|
||||
ucnv_convert(NULL,
|
||||
"UTF-8",
|
||||
strBuffer,
|
||||
ucnv_convert(NULL, "UTF-8", strBuffer,
|
||||
(int)ctx->dumpHardwareEntriesWithData[i].entry.softwareNameLength,
|
||||
(char*)(ctx->dumpHardwareEntriesWithData[i].softwareName),
|
||||
(int)ctx->dumpHardwareEntriesWithData[i].entry.softwareNameLength,
|
||||
&u_error_code);
|
||||
(char *)(ctx->dumpHardwareEntriesWithData[i].softwareName),
|
||||
(int)ctx->dumpHardwareEntriesWithData[i].entry.softwareNameLength, &u_error_code);
|
||||
printf("\t\tSoftware name: %s\n", strBuffer);
|
||||
free(strBuffer);
|
||||
}
|
||||
@@ -409,13 +336,10 @@ int info(char* path)
|
||||
{
|
||||
strBuffer = malloc(ctx->dumpHardwareEntriesWithData[i].entry.softwareVersionLength + 1);
|
||||
memset(strBuffer, 0, ctx->dumpHardwareEntriesWithData[i].entry.softwareVersionLength + 1);
|
||||
ucnv_convert(NULL,
|
||||
"UTF-8",
|
||||
strBuffer,
|
||||
ucnv_convert(NULL, "UTF-8", strBuffer,
|
||||
(int)ctx->dumpHardwareEntriesWithData[i].entry.softwareVersionLength,
|
||||
(char*)(ctx->dumpHardwareEntriesWithData[i].softwareVersion),
|
||||
(int)ctx->dumpHardwareEntriesWithData[i].entry.softwareVersionLength,
|
||||
&u_error_code);
|
||||
(char *)(ctx->dumpHardwareEntriesWithData[i].softwareVersion),
|
||||
(int)ctx->dumpHardwareEntriesWithData[i].entry.softwareVersionLength, &u_error_code);
|
||||
printf("\t\tSoftware version: %s\n", strBuffer);
|
||||
free(strBuffer);
|
||||
}
|
||||
@@ -424,11 +348,9 @@ int info(char* path)
|
||||
{
|
||||
strBuffer = malloc(ctx->dumpHardwareEntriesWithData[i].entry.softwareOperatingSystemLength + 1);
|
||||
memset(strBuffer, 0, ctx->dumpHardwareEntriesWithData[i].entry.softwareOperatingSystemLength + 1);
|
||||
ucnv_convert(NULL,
|
||||
"UTF-8",
|
||||
strBuffer,
|
||||
ucnv_convert(NULL, "UTF-8", strBuffer,
|
||||
(int)ctx->dumpHardwareEntriesWithData[i].entry.softwareOperatingSystemLength,
|
||||
(char*)(ctx->dumpHardwareEntriesWithData[i].softwareOperatingSystem),
|
||||
(char *)(ctx->dumpHardwareEntriesWithData[i].softwareOperatingSystem),
|
||||
(int)ctx->dumpHardwareEntriesWithData[i].entry.softwareOperatingSystemLength,
|
||||
&u_error_code);
|
||||
printf("\t\tSoftware operating system: %s\n", strBuffer);
|
||||
@@ -474,7 +396,7 @@ int info(char* path)
|
||||
{
|
||||
strBuffer = malloc(65);
|
||||
memset(strBuffer, 0, 65);
|
||||
ucnv_convert(NULL, "UTF-16LE", strBuffer, 64, (const char*)ctx->imageInfo.Application, 64, &u_error_code);
|
||||
ucnv_convert(NULL, "UTF-16LE", strBuffer, 64, (const char *)ctx->imageInfo.Application, 64, &u_error_code);
|
||||
if(u_error_code == U_ZERO_ERROR) printf("\tApplication: %s\n", strBuffer);
|
||||
free(strBuffer);
|
||||
}
|
||||
@@ -494,8 +416,7 @@ int info(char* path)
|
||||
printf("\tMedia type: %u\n", ctx->imageInfo.MediaType);
|
||||
|
||||
if(ctx->imageInfo.MediaSequence > 0 || ctx->imageInfo.LastMediaSequence > 0)
|
||||
printf("\tMedia is number %d in a set of %d media\n",
|
||||
ctx->imageInfo.MediaSequence,
|
||||
printf("\tMedia is number %d in a set of %d media\n", ctx->imageInfo.MediaSequence,
|
||||
ctx->imageInfo.LastMediaSequence);
|
||||
|
||||
if(ctx->imageInfo.DriveManufacturer != NULL) printf("\tDrive manufacturer: %s\n", ctx->imageInfo.DriveManufacturer);
|
||||
@@ -506,10 +427,8 @@ int info(char* path)
|
||||
printf("\tDrive firmware revision: %s\n", ctx->imageInfo.DriveFirmwareRevision);
|
||||
printf("\tXML media type: %d\n", ctx->imageInfo.XmlMediaType);
|
||||
if(ctx->imageInfo.Cylinders > 0 || ctx->imageInfo.Heads > 0 || ctx->imageInfo.SectorsPerTrack > 0)
|
||||
printf("\tMedia has %d cylinders, %d heads and %d sectors per track\n",
|
||||
ctx->imageInfo.Cylinders,
|
||||
ctx->imageInfo.Heads,
|
||||
ctx->imageInfo.SectorsPerTrack);
|
||||
printf("\tMedia has %d cylinders, %d heads and %d sectors per track\n", ctx->imageInfo.Cylinders,
|
||||
ctx->imageInfo.Heads, ctx->imageInfo.SectorsPerTrack);
|
||||
|
||||
if(ctx->checksums.hasMd5)
|
||||
{
|
||||
|
||||
@@ -111,7 +111,7 @@ void usage_verify_sectors()
|
||||
printf("\t<filename>\tPath to AaruFormat image to verify.\n");
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
uint64_t sector_no = 0;
|
||||
|
||||
|
||||
@@ -23,4 +23,4 @@
|
||||
#define AARUFORMAT_TOOL_MAJOR_VERSION 1
|
||||
#define AARUFORMAT_TOOL_MINOR_VERSION 0
|
||||
|
||||
#endif // LIBAARUFORMAT_TOOL_MAIN_H_
|
||||
#endif // LIBAARUFORMAT_TOOL_MAIN_H_
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
int printhex(unsigned char* array, unsigned int length, int width, bool color)
|
||||
int printhex(unsigned char *array, unsigned int length, int width, bool color)
|
||||
{
|
||||
char length_hex[17];
|
||||
char str[256];
|
||||
|
||||
12
tool/read.c
12
tool/read.c
@@ -24,12 +24,12 @@
|
||||
|
||||
#include "aaruformattool.h"
|
||||
|
||||
int read(unsigned long long sector_no, char* path)
|
||||
int read(unsigned long long sector_no, char *path)
|
||||
{
|
||||
aaruformatContext* ctx;
|
||||
aaruformatContext *ctx;
|
||||
int32_t res;
|
||||
uint32_t length;
|
||||
uint8_t* data;
|
||||
uint8_t *data;
|
||||
|
||||
ctx = aaruf_open(path);
|
||||
|
||||
@@ -74,12 +74,12 @@ int read(unsigned long long sector_no, char* path)
|
||||
aaruf_close(ctx);
|
||||
}
|
||||
|
||||
int read_long(unsigned long long sector_no, char* path)
|
||||
int read_long(unsigned long long sector_no, char *path)
|
||||
{
|
||||
aaruformatContext* ctx;
|
||||
aaruformatContext *ctx;
|
||||
int32_t res;
|
||||
uint32_t length;
|
||||
uint8_t* data;
|
||||
uint8_t *data;
|
||||
|
||||
ctx = aaruf_open(path);
|
||||
|
||||
|
||||
@@ -23,9 +23,9 @@
|
||||
|
||||
#include "aaruformattool.h"
|
||||
|
||||
int verify(char* path)
|
||||
int verify(char *path)
|
||||
{
|
||||
aaruformatContext* ctx;
|
||||
aaruformatContext *ctx;
|
||||
uint32_t res;
|
||||
|
||||
ctx = aaruf_open(path);
|
||||
@@ -38,7 +38,8 @@ int verify(char* path)
|
||||
|
||||
res = aaruf_verify_image(ctx);
|
||||
|
||||
if(res == AARUF_STATUS_OK) printf("Image blocks contain no errors.\n");
|
||||
if(res == AARUF_STATUS_OK)
|
||||
printf("Image blocks contain no errors.\n");
|
||||
else if(res == AARUF_ERROR_INVALID_BLOCK_CRC)
|
||||
printf("A block contains an invalid CRC value.\n");
|
||||
else
|
||||
@@ -47,14 +48,14 @@ int verify(char* path)
|
||||
return res;
|
||||
}
|
||||
|
||||
int verify_sectors(char* path)
|
||||
int verify_sectors(char *path)
|
||||
{
|
||||
aaruformatContext* ctx;
|
||||
aaruformatContext *ctx;
|
||||
uint64_t s;
|
||||
uint8_t* buffer;
|
||||
uint8_t *buffer;
|
||||
uint32_t buffer_len = 2352;
|
||||
int32_t res;
|
||||
CdEccContext* cd_ecc_context;
|
||||
CdEccContext *cd_ecc_context;
|
||||
ctx = aaruf_open(path);
|
||||
bool verify_result;
|
||||
bool unknown, has_edc, edc_correct, has_ecc_p, ecc_p_correct, has_ecc_q, ecc_q_correct;
|
||||
@@ -89,15 +90,8 @@ int verify_sectors(char* path)
|
||||
continue;
|
||||
}
|
||||
|
||||
verify_result = check_cd_sector_channel(cd_ecc_context,
|
||||
buffer,
|
||||
&unknown,
|
||||
&has_edc,
|
||||
&edc_correct,
|
||||
&has_ecc_p,
|
||||
&ecc_p_correct,
|
||||
&has_ecc_q,
|
||||
&ecc_q_correct);
|
||||
verify_result = check_cd_sector_channel(cd_ecc_context, buffer, &unknown, &has_edc, &edc_correct, &has_ecc_p,
|
||||
&ecc_p_correct, &has_ecc_q, &ecc_q_correct);
|
||||
|
||||
if(verify_result) continue;
|
||||
|
||||
@@ -118,7 +112,8 @@ int verify_sectors(char* path)
|
||||
any_error = true;
|
||||
}
|
||||
|
||||
if(any_error) printf("\rSome sectors had incorrect checksums.\n");
|
||||
if(any_error)
|
||||
printf("\rSome sectors had incorrect checksums.\n");
|
||||
else
|
||||
printf("\rAll sector checksums are correct.\n");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user