rendered paste body CString input, tmpMasterFile, error;
FILE *master, *tmpMaster;
time_t timestamp = time(NULL);
const char *days, *tempMaster, *MasterFilePath = (LPCTSTR) MasterFile;
int seconds;
int whenprocs = 0;
int i = 0; // the number of lines in the current address; minimal is 4.
const int BUFSIZE = 1024;
char buf[BUFSIZE];
char *address1 = NULL, *address2 = NULL, *address3 = NULL, *address4 = NULL, *address5 = NULL;
GetDlgItemText(IDC_AGE, input);
days = (LPCTSTR)input;
if (!validnumber(days))
{
AfxMessageBox("Please input a valid number of days.");
return;
}
seconds = (int)days - 86400;
// sanity checking
fopen_s(&master, MasterFilePath, "r");
if (master == NULL)
{
error.Format("ERROR: Unable to open %s.", MasterFile);
EndDialog(IDD_PURGE);
AfxMessageBox(error);
return;
}
fclose(master);
tmpMasterFile = MasterFile + ".old";
tempMaster = (LPCTSTR) tmpMasterFile;
if (!MoveFile(MasterFile, tempMaster))
{
error.Format("ERROR: Unable to create a temporary file from %s.", MasterFile);
EndDialog(IDD_PURGE);
AfxMessageBox(error);
return;
}
// more sanity checking below
fopen_s(&tmpMaster, tempMaster, "r");
if (tmpMaster == NULL)
{
error.Format("ERROR: Unable to open %s.", tempMaster);
EndDialog(IDD_PURGE);
AfxMessageBox(error);
return;
}
if (master == NULL)
{
error.Format("ERROR: Unable to open %s.", MasterFile);
EndDialog(IDD_PURGE);
AfxMessageBox(error);
return;
}
// end lots of sanity checking
while (fgets(buf, BUFSIZE, tmpMaster))
{
// sanity check.
strcpy_s(buf, strip_invalid_chars(buf));
if (*buf == '\n' || *buf == ' ' || *buf == NULL) {
if (i < 4 || i > 5) {
// this is a bad address! it's either too short or too long.
} else if (address1) {
// successfully obtained full street address!
// now check the timestamp
if (address5 && validnumber(address5)) whenprocs = atoi(address5);
else if (address4 && validnumber(address4)) whenprocs = atoi(address4);
if (!whenprocs) {
continue; // this address is bad!
} else {
// this address seems to be valid, check it's timestamp
if (whenprocs > (timestamp - seconds)) {
fprintf(master, "%s\r\n", address1);
fprintf(master, "%s\r\n", address2);
fprintf(master, "%s\r\n", address3);
fprintf(master, "%s\r\n", address4);
if (address5) fprintf(master, "%s\r\n", address5);
}
}
}
i = 0;
whenprocs = 0;
address1 = NULL;
address2 = NULL;
address3 = NULL;
address4 = NULL;
address5 = NULL;
}
i++;
if (address1 == NULL) { address1 = _strdup(buf); }
else if (address2 == NULL) { address2 = _strdup(buf); }
else if (address3 == NULL) { address3 = _strdup(buf); }
else if (address4 == NULL) { address4 = _strdup(buf); }
else if (address5 == NULL) { address5 = _strdup(buf); }
}
fclose(tmpMaster);
fclose(master);
EndDialog(IDD_PURGE);
error.Format("Process Complete! The old master file saved as %s", tmpMasterFile);
AfxMessageBox(error);