Refactor IO, add buffered IO
I wasn't happy with existing implementation of the IO, so I decided to change it - as a result there is no longer BH_IOOpen and BH_IOClose and many IO operations are now optional (behind BH_IOCtl). Finnally implemented buffered IO and fixed size memory buffer IO.
This commit is contained in:
@@ -165,9 +165,8 @@ static int ProcessPack(Config *config,
|
||||
if (strcmp(entry.name, config->input))
|
||||
continue;
|
||||
|
||||
output = BH_FileNew(config->output);
|
||||
if (BH_IOOpen(output, BH_IO_WRITE) ||
|
||||
BH_IOSeek(io, entry.offset, BH_IO_SEEK_SET) ||
|
||||
output = BH_FileNew(config->output, BH_FILE_WRITE | BH_FILE_TRUNCATE, NULL);
|
||||
if (!output || BH_IOSeek(io, entry.offset, BH_IO_SEEK_SET) ||
|
||||
CopyData(io, output, entry.size))
|
||||
{
|
||||
BH_IOFree(output);
|
||||
@@ -209,8 +208,7 @@ int main(int argc, char **argv)
|
||||
}
|
||||
|
||||
/* Read and write */
|
||||
io = BH_FileNew(config.file);
|
||||
if (BH_IOOpen(io, BH_IO_READ | BH_IO_EXIST))
|
||||
if ((io = BH_FileNew(config.file, BH_FILE_READ | BH_FILE_EXIST, NULL)) == NULL)
|
||||
{
|
||||
printf("Can't open file %s\n", config.file);
|
||||
BH_IOFree(io);
|
||||
|
||||
@@ -21,23 +21,25 @@ int main(int argc, char **argv)
|
||||
if (argc < 2)
|
||||
printUsage();
|
||||
|
||||
inFile = BH_FileNew(argv[1]);
|
||||
outFile = BH_FileNew(argv[2]);
|
||||
inFile = BH_FileNew(argv[1], BH_FILE_READ | BH_FILE_EXIST, NULL);
|
||||
outFile = BH_FileNew(argv[2], BH_FILE_WRITE | BH_FILE_TRUNCATE, NULL);
|
||||
|
||||
if (!inFile || BH_IOOpen(inFile, BH_IO_READ | BH_IO_EXIST))
|
||||
return -1;
|
||||
|
||||
if (!outFile || BH_IOOpen(outFile, BH_IO_WRITE | BH_IO_TRUNCATE))
|
||||
if (!inFile || !outFile)
|
||||
return -1;
|
||||
|
||||
inSize = 0;
|
||||
while (!(BH_IOFlags(inFile) & BH_IO_FLAG_EOF))
|
||||
while (1)
|
||||
{
|
||||
/* Read one byte and try to decode */
|
||||
if (!inSize || !(outSize = BH_UnicodeDecodeUtf8(inBuffer, inSize, &unit)))
|
||||
{
|
||||
BH_IOPeek(inFile, inBuffer + inSize, 1, &outSize);
|
||||
BH_IORead(inFile, inBuffer + inSize, 1, &outSize);
|
||||
inSize += outSize;
|
||||
|
||||
if (!outSize)
|
||||
break;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user