// <File Header>
|
// <File Header>
|
// </File Header>
|
// </File Header>
|
|
|
// <File Info>
|
// <File Info>
|
// </File Info>
|
// </File Info>
|
|
|
// <File Body>
|
// <File Body>
|
#include <string.h>
|
#include <string.h>
|
#include <io.h>
|
#include <io.h>
|
#include <stdio.h>
|
#include <stdio.h>
|
#include <stdlib.h>
|
#include <stdlib.h>
|
#include "tagScan.h"
|
#include "tagScan.h"
|
|
|
// File IO operations (read/write) occur in chunks of FILE_IO_DATA_CHUNK.
|
// File IO operations (read/write) occur in chunks of FILE_IO_DATA_CHUNK.
|
// A tag must be shorter than FILE_IO_DATA_CHUNK/2.
|
// A tag must be shorter than FILE_IO_DATA_CHUNK/2.
|
#define FILE_IO_DATA_CHUNK 1000
|
#define FILE_IO_DATA_CHUNK 1000
|
|
|
|
|
|
|
// scanTag_t private methods
|
// scanTag_t private methods
|
|
|
void scanTag_t_setStatus(scanTag_t *stag, int errCode)
|
void scanTag_t_setStatus(scanTag_t *stag, int errCode)
|
{
|
{
|
stag->errCode = errCode;
|
stag->errCode = errCode;
|
switch (stag->errCode)
|
switch (stag->errCode)
|
{
|
{
|
case TAG_SCAN_OK:
|
case TAG_SCAN_OK:
|
{
|
{
|
strcpy(stag->errMsg, "Tag scanning OK.\n");
|
strcpy(stag->errMsg, "Tag scanning OK.\n");
|
}; break;
|
}; break;
|
case TAG_SCAN_TAG_NOT_FOUND:
|
case TAG_SCAN_TAG_NOT_FOUND:
|
{
|
{
|
strcpy(stag->errMsg, "Tag scanning error: could not find tag.\n");
|
strcpy(stag->errMsg, "Tag scanning error: could not find tag.\n");
|
}; break;
|
}; break;
|
case TAG_SCAN_MULTIPLE_TAG:
|
case TAG_SCAN_MULTIPLE_TAG:
|
{
|
{
|
strcpy(stag->errMsg, "Tag scanning error: multiple tag match.\n");
|
strcpy(stag->errMsg, "Tag scanning error: multiple tag match.\n");
|
}; break;
|
}; break;
|
case TAG_SCAN_END_BEFORE_BEGIN:
|
case TAG_SCAN_END_BEFORE_BEGIN:
|
{
|
{
|
strcpy(stag->errMsg, "Tag scanning error: `end' tag before `begin' tag.\n");
|
strcpy(stag->errMsg, "Tag scanning error: `end' tag before `begin' tag.\n");
|
}; break;
|
}; break;
|
case TAG_SCAN_FILE_NOT_FOUND:
|
case TAG_SCAN_FILE_NOT_FOUND:
|
{
|
{
|
strcpy(stag->errMsg, "Tag scanning error: file not found.");
|
strcpy(stag->errMsg, "Tag scanning error: file not found.");
|
}; break;
|
}; break;
|
case TAG_SCAN_MALLOC_ERR:
|
case TAG_SCAN_MALLOC_ERR:
|
{
|
{
|
strcpy(stag->errMsg, "Tag scanning error: could not allocate memory.\n");
|
strcpy(stag->errMsg, "Tag scanning error: could not allocate memory.\n");
|
}; break;
|
}; break;
|
case TAG_SCAN_FILE_IO_ERR:
|
case TAG_SCAN_FILE_IO_ERR:
|
{
|
{
|
strcpy(stag->errMsg, "Tag scanning error: file IO error.\n");
|
strcpy(stag->errMsg, "Tag scanning error: file IO error.\n");
|
}; break;
|
}; break;
|
default:
|
default:
|
{
|
{
|
strcpy(stag->errMsg, "Unknown error during tag scanning.");
|
strcpy(stag->errMsg, "Unknown error during tag scanning.");
|
}; break;
|
}; break;
|
}
|
}
|
}
|
}
|
|
|
|
|
|
|
long int scanTag_t_findNextTag(char* tag, long int crtPos, FILE* fStr, scanTag_t *stag)
|
long int scanTag_t_findNextTag(char* tag, long int crtPos, FILE* fStr, scanTag_t *stag)
|
{
|
{
|
char str1[FILE_IO_DATA_CHUNK+2];
|
char str1[FILE_IO_DATA_CHUNK+2];
|
char *stringPos1, *stringPos2, *stringPos3;
|
char *stringPos1, *stringPos2, *stringPos3;
|
long int retVal, str1offset, str1offsetTot;
|
long int retVal, str1offset, str1offsetTot;
|
long int nrItemsRead;
|
long int nrItemsRead;
|
int tagFound;
|
int tagFound;
|
int partialMatch;
|
int partialMatch;
|
int fStrEOF;
|
int fStrEOF;
|
|
|
retVal = crtPos;
|
retVal = crtPos;
|
if (fseek(fStr, crtPos, SEEK_SET)==0)
|
if (fseek(fStr, crtPos, SEEK_SET)==0)
|
{
|
{
|
tagFound = 0;
|
tagFound = 0;
|
fStrEOF=0;
|
fStrEOF=0;
|
while ((tagFound==0) && (fStrEOF==0))
|
while ((tagFound==0) && (fStrEOF==0))
|
{
|
{
|
nrItemsRead = fread(str1, 1, FILE_IO_DATA_CHUNK, fStr);
|
nrItemsRead = fread(str1, 1, FILE_IO_DATA_CHUNK, fStr);
|
if (nrItemsRead!=FILE_IO_DATA_CHUNK) fStrEOF=1;
|
if (nrItemsRead!=FILE_IO_DATA_CHUNK) fStrEOF=1;
|
str1[nrItemsRead] = NULL;
|
str1[nrItemsRead] = NULL;
|
str1offset = 0;
|
str1offset = 0;
|
str1offsetTot = 0;
|
str1offsetTot = 0;
|
|
|
stringPos1 = str1;
|
stringPos1 = str1;
|
while ((tagFound==0) && (*stringPos1!=NULL))
|
while ((tagFound==0) && (*stringPos1!=NULL))
|
{
|
{
|
stringPos2 = tag;
|
stringPos2 = tag;
|
str1offset = str1offsetTot;
|
str1offset = str1offsetTot;
|
partialMatch = 0;
|
partialMatch = 0;
|
while ((tagFound==0) && (*stringPos1!=NULL) && (*stringPos2!=NULL))
|
while ((tagFound==0) && (*stringPos1!=NULL) && (*stringPos2!=NULL))
|
{
|
{
|
if (*stringPos1==*stringPos2)
|
if (*stringPos1==*stringPos2)
|
{
|
{
|
partialMatch = 1;
|
partialMatch = 1;
|
stringPos1++;
|
stringPos1++;
|
stringPos2++;
|
stringPos2++;
|
str1offsetTot++;
|
str1offsetTot++;
|
if (*stringPos2==NULL)
|
if (*stringPos2==NULL)
|
{
|
{
|
tagFound = 1;
|
tagFound = 1;
|
retVal = ftell(fStr)-nrItemsRead+str1offset;
|
retVal = ftell(fStr)-nrItemsRead+str1offset;
|
break;
|
break;
|
}
|
}
|
}
|
}
|
else
|
else
|
{
|
{
|
if (partialMatch==0)
|
if (partialMatch==0)
|
{
|
{
|
stringPos1++;
|
stringPos1++;
|
str1offset++;
|
str1offset++;
|
str1offsetTot++;
|
str1offsetTot++;
|
}
|
}
|
partialMatch = 0;
|
partialMatch = 0;
|
break;
|
break;
|
}
|
}
|
}
|
}
|
}
|
}
|
if (tagFound==0)
|
if (tagFound==0)
|
{
|
{
|
// Tag not found in this data chunk.
|
// Tag not found in this data chunk.
|
// Rewind with twice tag's length and get a new data chunk.
|
// Rewind with twice tag's length and get a new data chunk.
|
fseek(fStr, -2*strlen(tag), SEEK_CUR);
|
fseek(fStr, -2*strlen(tag), SEEK_CUR);
|
}
|
}
|
}
|
}
|
}
|
}
|
if (tagFound == 0)
|
if (tagFound == 0)
|
scanTag_t_setStatus(stag, TAG_SCAN_TAG_NOT_FOUND);
|
scanTag_t_setStatus(stag, TAG_SCAN_TAG_NOT_FOUND);
|
return retVal;
|
return retVal;
|
}
|
}
|
|
|
|
|
|
|
long int scanTag_t_findTag(char *tag, FILE *fStr, scanTag_t *stag)
|
long int scanTag_t_findTag(char *tag, FILE *fStr, scanTag_t *stag)
|
{
|
{
|
long int pos1, pos2;
|
long int pos1, pos2;
|
|
|
pos1 = 0;
|
pos1 = 0;
|
pos2 = scanTag_t_findNextTag(tag, pos1, fStr, stag);
|
pos2 = scanTag_t_findNextTag(tag, pos1, fStr, stag);
|
// Does that tag appear at least once?
|
// Does that tag appear at least once?
|
if (stag->errCode == TAG_SCAN_OK) {
|
if (stag->errCode == TAG_SCAN_OK) {
|
// Yes, the tag appears at least once.
|
// Yes, the tag appears at least once.
|
scanTag_t_findNextTag(tag, pos2+strlen(tag), fStr, stag);
|
scanTag_t_findNextTag(tag, pos2+strlen(tag), fStr, stag);
|
// Does that tag appear exactly once?
|
// Does that tag appear exactly once?
|
if (stag->errCode == TAG_SCAN_TAG_NOT_FOUND) {
|
if (stag->errCode == TAG_SCAN_TAG_NOT_FOUND) {
|
// Yes, the tag appears exactly once. Reset status to OK.
|
// Yes, the tag appears exactly once. Reset status to OK.
|
scanTag_t_setStatus(stag, TAG_SCAN_OK);
|
scanTag_t_setStatus(stag, TAG_SCAN_OK);
|
return pos2;
|
return pos2;
|
}
|
}
|
else {
|
else {
|
// No, multiple tag matched.
|
// No, multiple tag matched.
|
scanTag_t_setStatus(stag, TAG_SCAN_MULTIPLE_TAG);
|
scanTag_t_setStatus(stag, TAG_SCAN_MULTIPLE_TAG);
|
return 0;
|
return 0;
|
}
|
}
|
}
|
}
|
else {
|
else {
|
// No, tag not found.
|
// No, tag not found.
|
scanTag_t_setStatus(stag, TAG_SCAN_TAG_NOT_FOUND);
|
scanTag_t_setStatus(stag, TAG_SCAN_TAG_NOT_FOUND);
|
return 0;
|
return 0;
|
}
|
}
|
}
|
}
|
|
|
|
|
|
|
// scanTag_t public methods
|
// scanTag_t public methods
|
|
|
void scanTag_t_construct(scanTag_t *stag)
|
void scanTag_t_construct(scanTag_t *stag)
|
{
|
{
|
stag->readText = (char *) malloc(1);
|
stag->readText = (char *) malloc(1);
|
if (stag->readText==NULL)
|
if (stag->readText==NULL)
|
{
|
{
|
fprintf(stdout, "Error: could not allocate memory. Exitting...\n");
|
fprintf(stdout, "Error: could not allocate memory. Exitting...\n");
|
exit(1);
|
exit(1);
|
}
|
}
|
stag->errMsg = (char*) malloc(TAG_SCAN_MSG_MAX_LEN);
|
stag->errMsg = (char*) malloc(TAG_SCAN_MSG_MAX_LEN);
|
if (stag->errMsg==NULL)
|
if (stag->errMsg==NULL)
|
{
|
{
|
fprintf(stdout, "Error: could not allocate memory. Exitting...\n");
|
fprintf(stdout, "Error: could not allocate memory. Exitting...\n");
|
exit(1);
|
exit(1);
|
}
|
}
|
scanTag_t_setStatus(stag, TAG_SCAN_OK);
|
scanTag_t_setStatus(stag, TAG_SCAN_OK);
|
}
|
}
|
|
|
|
|
|
|
void scanTag_t_destruct(scanTag_t *stag)
|
void scanTag_t_destruct(scanTag_t *stag)
|
{
|
{
|
free(stag->readText);
|
free(stag->readText);
|
free(stag->errMsg);
|
free(stag->errMsg);
|
}
|
}
|
|
|
|
|
|
|
char *scanTag_t_getStatus(scanTag_t *stag)
|
char *scanTag_t_getStatus(scanTag_t *stag)
|
{
|
{
|
return stag->errMsg;
|
return stag->errMsg;
|
}
|
}
|
|
|
|
|
|
|
void scanTag_t_readTaggedText(char *tagBegin, char *tagEnd, char *fName, scanTag_t *stag)
|
void scanTag_t_readTaggedText(char *tagBegin, char *tagEnd, char *fName, scanTag_t *stag)
|
{
|
{
|
long int pos1, pos2;
|
long int pos1, pos2;
|
FILE *fStr;
|
FILE *fStr;
|
long int nrItemsRead;
|
long int nrItemsRead;
|
|
|
scanTag_t_setStatus(stag, TAG_SCAN_OK);
|
scanTag_t_setStatus(stag, TAG_SCAN_OK);
|
fStr = fopen(fName, "rb");
|
fStr = fopen(fName, "rb");
|
if (fStr != NULL)
|
if (fStr != NULL)
|
{
|
{
|
pos1 = scanTag_t_findTag(tagBegin, fStr, stag);
|
pos1 = scanTag_t_findTag(tagBegin, fStr, stag);
|
pos2 = scanTag_t_findTag(tagEnd, fStr, stag);
|
pos2 = scanTag_t_findTag(tagEnd, fStr, stag);
|
if (stag->errCode == TAG_SCAN_OK)
|
if (stag->errCode == TAG_SCAN_OK)
|
{
|
{
|
if ((long int)(pos1+strlen(tagBegin))<=pos2)
|
if ((long int)(pos1+strlen(tagBegin))<=pos2)
|
{
|
{
|
free(stag->readText);
|
free(stag->readText);
|
stag->readText = (char*) malloc(pos2-pos1-strlen(tagBegin)+2);
|
stag->readText = (char*) malloc(pos2-pos1-strlen(tagBegin)+2);
|
if (stag->readText!=NULL)
|
if (stag->readText!=NULL)
|
{
|
{
|
fseek(fStr, pos1+strlen(tagBegin), SEEK_SET);
|
fseek(fStr, pos1+strlen(tagBegin), SEEK_SET);
|
nrItemsRead = fread(stag->readText, 1, pos2-pos1-strlen(tagBegin), fStr);
|
nrItemsRead = fread(stag->readText, 1, pos2-pos1-strlen(tagBegin), fStr);
|
if (nrItemsRead == (long int)(pos2-pos1-strlen(tagBegin)))
|
if (nrItemsRead == (long int)(pos2-pos1-strlen(tagBegin)))
|
{
|
{
|
stag->readText[pos2-pos1-strlen(tagBegin)] = NULL;
|
stag->readText[pos2-pos1-strlen(tagBegin)] = NULL;
|
fclose(fStr);
|
fclose(fStr);
|
}
|
}
|
else
|
else
|
{
|
{
|
scanTag_t_setStatus(stag, TAG_SCAN_UNKNOWN_ERR);
|
scanTag_t_setStatus(stag, TAG_SCAN_UNKNOWN_ERR);
|
fclose(fStr);
|
fclose(fStr);
|
}
|
}
|
}
|
}
|
else
|
else
|
{
|
{
|
scanTag_t_setStatus(stag, TAG_SCAN_MALLOC_ERR);
|
scanTag_t_setStatus(stag, TAG_SCAN_MALLOC_ERR);
|
fclose(fStr);
|
fclose(fStr);
|
}
|
}
|
}
|
}
|
else
|
else
|
{
|
{
|
scanTag_t_setStatus(stag, TAG_SCAN_END_BEFORE_BEGIN);
|
scanTag_t_setStatus(stag, TAG_SCAN_END_BEFORE_BEGIN);
|
fclose(fStr);
|
fclose(fStr);
|
}
|
}
|
}
|
}
|
}
|
}
|
else
|
else
|
{
|
{
|
scanTag_t_setStatus(stag, TAG_SCAN_FILE_NOT_FOUND);
|
scanTag_t_setStatus(stag, TAG_SCAN_FILE_NOT_FOUND);
|
}
|
}
|
}
|
}
|
|
|
|
|
|
|
void scanTag_t_writeTaggedText(char* tag_begin, char* tag_end, char* newText, char* fName, scanTag_t* stag)
|
void scanTag_t_writeTaggedText(char* tag_begin, char* tag_end, char* newText, char* fName, scanTag_t* stag)
|
{
|
{
|
long int pos1, pos2;
|
long int pos1, pos2;
|
FILE *fSrc, *fDst;
|
FILE *fSrc, *fDst;
|
char *tStr;
|
char *tStr;
|
long int nrItemsRead;
|
long int nrItemsRead;
|
int fSrcEOF;
|
int fSrcEOF;
|
long int fSrcOffsetNew, fSrcOffsetOld;
|
long int fSrcOffsetNew, fSrcOffsetOld;
|
|
|
scanTag_t_setStatus(stag, TAG_SCAN_OK);
|
scanTag_t_setStatus(stag, TAG_SCAN_OK);
|
fSrc = fopen(fName, "rb");
|
fSrc = fopen(fName, "rb");
|
if (fSrc != NULL)
|
if (fSrc != NULL)
|
{
|
{
|
pos1 = scanTag_t_findTag(tag_begin, fSrc, stag);
|
pos1 = scanTag_t_findTag(tag_begin, fSrc, stag);
|
pos2 = scanTag_t_findTag(tag_end, fSrc, stag);
|
pos2 = scanTag_t_findTag(tag_end, fSrc, stag);
|
if (stag->errCode == TAG_SCAN_OK)
|
if (stag->errCode == TAG_SCAN_OK)
|
{
|
{
|
if ((long int)(pos1+strlen(tag_begin))<=pos2)
|
if ((long int)(pos1+strlen(tag_begin))<=pos2)
|
{
|
{
|
// Open src and dst file.
|
// Open src and dst file.
|
tStr = (char*) malloc(strlen(fName)+1+2);
|
tStr = (char*) malloc(strlen(fName)+1+2);
|
if (tStr!=NULL)
|
if (tStr!=NULL)
|
{
|
{
|
strcpy(tStr, fName);
|
strcpy(tStr, fName);
|
strcat(tStr, "~");
|
strcat(tStr, "~");
|
fSrc = fopen(fName, "rb");
|
fSrc = fopen(fName, "rb");
|
fDst = fopen(tStr, "wb+");
|
fDst = fopen(tStr, "wb+");
|
if ((fSrc!=NULL) && (fDst!=NULL))
|
if ((fSrc!=NULL) && (fDst!=NULL))
|
{
|
{
|
// Both src and dst opened.
|
// Both src and dst opened.
|
free(tStr);
|
free(tStr);
|
tStr = (char*) malloc(FILE_IO_DATA_CHUNK+2);
|
tStr = (char*) malloc(FILE_IO_DATA_CHUNK+2);
|
if (tStr!=NULL)
|
if (tStr!=NULL)
|
{
|
{
|
// Blindly copy src to dst.
|
// Blindly copy src to dst.
|
fSrcEOF = 0;
|
fSrcEOF = 0;
|
while (fSrcEOF == 0)
|
while (fSrcEOF == 0)
|
{
|
{
|
nrItemsRead = fread(tStr, 1, FILE_IO_DATA_CHUNK, fSrc);
|
nrItemsRead = fread(tStr, 1, FILE_IO_DATA_CHUNK, fSrc);
|
tStr[nrItemsRead] = NULL;
|
tStr[nrItemsRead] = NULL;
|
if (nrItemsRead != FILE_IO_DATA_CHUNK)
|
if (nrItemsRead != FILE_IO_DATA_CHUNK)
|
fSrcEOF = 1;
|
fSrcEOF = 1;
|
fwrite(tStr, 1, strlen(tStr), fDst);
|
fwrite(tStr, 1, strlen(tStr), fDst);
|
}
|
}
|
|
|
// Copy back only what's needed.
|
// Copy back only what's needed.
|
// First, interchange src and dst.
|
// First, interchange src and dst.
|
fclose(fSrc);
|
fclose(fSrc);
|
fclose(fDst);
|
fclose(fDst);
|
free(tStr);
|
free(tStr);
|
tStr = (char*) malloc(strlen(fName)+1+2);
|
tStr = (char*) malloc(strlen(fName)+1+2);
|
strcpy(tStr, fName);
|
strcpy(tStr, fName);
|
strcat(tStr, "~");
|
strcat(tStr, "~");
|
fSrc = fopen(tStr, "rb");
|
fSrc = fopen(tStr, "rb");
|
fDst = fopen(fName, "wb+");
|
fDst = fopen(fName, "wb+");
|
// Now scan for tags and replace text.
|
// Now scan for tags and replace text.
|
free(tStr);
|
free(tStr);
|
tStr = (char*) malloc(FILE_IO_DATA_CHUNK+2);
|
tStr = (char*) malloc(FILE_IO_DATA_CHUNK+2);
|
//pos1 = scanTag_t_findTag(tag_begin, fSrc, stag);
|
//pos1 = scanTag_t_findTag(tag_begin, fSrc, stag);
|
//pos2 = scanTag_t_findTag(tag_end, fSrc, stag);
|
//pos2 = scanTag_t_findTag(tag_end, fSrc, stag);
|
fseek(fSrc, 0, SEEK_SET);
|
fseek(fSrc, 0, SEEK_SET);
|
fseek(fDst, 0, SEEK_SET);
|
fseek(fDst, 0, SEEK_SET);
|
fSrcOffsetNew = 0;
|
fSrcOffsetNew = 0;
|
while (fSrcOffsetNew < pos1)
|
while (fSrcOffsetNew < pos1)
|
{
|
{
|
nrItemsRead = fread(tStr, 1, FILE_IO_DATA_CHUNK, fSrc);
|
nrItemsRead = fread(tStr, 1, FILE_IO_DATA_CHUNK, fSrc);
|
tStr[nrItemsRead] = NULL;
|
tStr[nrItemsRead] = NULL;
|
fSrcOffsetOld = fSrcOffsetNew;
|
fSrcOffsetOld = fSrcOffsetNew;
|
fSrcOffsetNew = ftell(fSrc);
|
fSrcOffsetNew = ftell(fSrc);
|
if (fSrcOffsetNew > pos1)
|
if (fSrcOffsetNew > pos1)
|
tStr[pos1 - fSrcOffsetOld] = NULL;
|
tStr[pos1 - fSrcOffsetOld] = NULL;
|
fwrite(tStr, 1, strlen(tStr), fDst);
|
fwrite(tStr, 1, strlen(tStr), fDst);
|
fflush(fDst);
|
fflush(fDst);
|
}
|
}
|
|
|
fwrite(tag_begin, 1, strlen(tag_begin), fDst);
|
fwrite(tag_begin, 1, strlen(tag_begin), fDst);
|
fflush(fDst);
|
fflush(fDst);
|
fwrite(newText, 1, strlen(newText), fDst);
|
fwrite(newText, 1, strlen(newText), fDst);
|
fflush(fDst);
|
fflush(fDst);
|
fwrite(tag_end, 1, strlen(tag_end), fDst);
|
fwrite(tag_end, 1, strlen(tag_end), fDst);
|
fflush(fDst);
|
fflush(fDst);
|
|
|
if (fseek(fSrc, pos2+strlen(tag_end), SEEK_SET)==0)
|
if (fseek(fSrc, pos2+strlen(tag_end), SEEK_SET)==0)
|
{
|
{
|
fSrcEOF = 0;
|
fSrcEOF = 0;
|
while (fSrcEOF == 0)
|
while (fSrcEOF == 0)
|
{
|
{
|
nrItemsRead = fread(tStr, 1, FILE_IO_DATA_CHUNK, fSrc);
|
nrItemsRead = fread(tStr, 1, FILE_IO_DATA_CHUNK, fSrc);
|
tStr[nrItemsRead] = NULL;
|
tStr[nrItemsRead] = NULL;
|
if (nrItemsRead != FILE_IO_DATA_CHUNK)
|
if (nrItemsRead != FILE_IO_DATA_CHUNK)
|
fSrcEOF = 1;
|
fSrcEOF = 1;
|
fwrite(tStr, 1, strlen(tStr), fDst);
|
fwrite(tStr, 1, strlen(tStr), fDst);
|
}
|
}
|
}
|
}
|
else
|
else
|
{
|
{
|
free(tStr);
|
free(tStr);
|
fclose(fSrc);
|
fclose(fSrc);
|
fclose(fDst);
|
fclose(fDst);
|
scanTag_t_setStatus(stag, TAG_SCAN_UNKNOWN_ERR);
|
scanTag_t_setStatus(stag, TAG_SCAN_UNKNOWN_ERR);
|
return;
|
return;
|
}
|
}
|
|
|
free(tStr);
|
free(tStr);
|
fclose(fSrc);
|
fclose(fSrc);
|
fclose(fDst);
|
fclose(fDst);
|
}
|
}
|
else
|
else
|
{
|
{
|
scanTag_t_setStatus(stag, TAG_SCAN_MALLOC_ERR);
|
scanTag_t_setStatus(stag, TAG_SCAN_MALLOC_ERR);
|
return;
|
return;
|
}
|
}
|
}
|
}
|
else
|
else
|
{
|
{
|
free(tStr);
|
free(tStr);
|
scanTag_t_setStatus(stag, TAG_SCAN_FILE_IO_ERR);
|
scanTag_t_setStatus(stag, TAG_SCAN_FILE_IO_ERR);
|
return;
|
return;
|
}
|
}
|
}
|
}
|
else
|
else
|
{
|
{
|
scanTag_t_setStatus(stag, TAG_SCAN_MALLOC_ERR);
|
scanTag_t_setStatus(stag, TAG_SCAN_MALLOC_ERR);
|
return;
|
return;
|
}
|
}
|
}
|
}
|
else
|
else
|
{
|
{
|
scanTag_t_setStatus(stag, TAG_SCAN_END_BEFORE_BEGIN);
|
scanTag_t_setStatus(stag, TAG_SCAN_END_BEFORE_BEGIN);
|
fclose(fSrc);
|
fclose(fSrc);
|
return;
|
return;
|
}
|
}
|
}
|
}
|
}
|
}
|
else
|
else
|
{
|
{
|
scanTag_t_setStatus(stag, TAG_SCAN_FILE_NOT_FOUND);
|
scanTag_t_setStatus(stag, TAG_SCAN_FILE_NOT_FOUND);
|
return;
|
return;
|
}
|
}
|
}
|
}
|
// </File Body>
|
// </File Body>
|
|
|