void DOSFAM::CloseTableFile(PGLOBAL g) { int rc; if (UseTemp && T_Stream) { if (Tdbp->Mode == MODE_UPDATE) { // Copy eventually remaining lines bool b; fseek(Stream, 0, SEEK_END); Fpos = ftell(Stream); rc = MoveIntermediateLines(g, &b); } // endif Mode // Delete the old file and rename the new temp file. RenameTempFile(g); // Also close all files } else { rc = PlugCloseFile(g, To_Fb); if (trace) htrc("DOS Close: closing %s rc=%d\n", To_File, rc); } // endif UseTemp Stream = NULL; // So we can know whether table is open } // end of CloseTableFile
void BLKFAM::CloseTableFile(PGLOBAL g) { int rc, wrc = RC_OK; if (UseTemp && T_Stream) { if (Tdbp->GetMode() == MODE_UPDATE) { // Copy eventually remaining lines bool b; fseek(Stream, 0, SEEK_END); Fpos = ftell(Stream); rc = MoveIntermediateLines(g, &b); } else rc = RC_OK; if (rc == RC_OK) // Delete the old file and rename the new temp file. rc = RenameTempFile(g); // Also close all files else rc = PlugCloseFile(g, To_Fb); } else { // Closing is True if last Write was in error if (Tdbp->GetMode() == MODE_INSERT && CurNum && !Closing) { // Some more inserted lines remain to be written Rbuf = CurNum--; Closing = true; wrc = WriteBuffer(g); } else if (Modif && !Closing) { // Last updated block remains to be written Closing = true; wrc = ReadBuffer(g); } // endif's rc = PlugCloseFile(g, To_Fb); if (trace) htrc("BLK CloseTableFile: closing %s mode=%d wrc=%d rc=%d\n", To_File, Tdbp->GetMode(), wrc, rc); } // endif UseTemp Stream = NULL; // So we can know whether table is open } // end of CloseTableFile
void DBFFAM::CloseTableFile(PGLOBAL g, bool abort) { int rc = RC_OK, wrc = RC_OK; MODE mode = Tdbp->GetMode(); Abort = abort; // Closing is True if last Write was in error if (mode == MODE_INSERT && CurNum && !Closing) { // Some more inserted lines remain to be written Rbuf = CurNum--; // Closing = true; wrc = WriteBuffer(g); } else if (mode == MODE_UPDATE || mode == MODE_DELETE) { if (Modif && !Closing) { // Last updated block remains to be written Closing = true; wrc = WriteModifiedBlock(g); } // endif Modif if (UseTemp && T_Stream && wrc == RC_OK) { if (!Abort) { // Copy any remaining lines bool b; Fpos = Tdbp->Cardinality(g); Abort = MoveIntermediateLines(g, &b) != RC_OK; } // endif Abort // Delete the old file and rename the new temp file. RenameTempFile(g); goto fin; } // endif UseTemp } // endif's mode if (Tdbp->GetMode() == MODE_INSERT) { int n = ftell(Stream) - Headlen; rc = PlugCloseFile(g, To_Fb); if (n >= 0 && !(n % Lrecl)) { n /= Lrecl; // New number of lines if (n > Records) { // Update the number of rows in the file header char filename[_MAX_PATH]; PlugSetPath(filename, To_File, Tdbp->GetPath()); if ((Stream= global_fopen(g, MSGID_OPEN_MODE_STRERROR, filename, "r+b"))) { fseek(Stream, 4, SEEK_SET); // Get header.Records position fwrite(&n, sizeof(int), 1, Stream); fclose(Stream); Stream= NULL; Records= n; // Update Records value } } // endif n } // endif n } else // Finally close the file rc = PlugCloseFile(g, To_Fb); fin: if (trace) htrc("DBF CloseTableFile: closing %s mode=%d wrc=%d rc=%d\n", To_File, mode, wrc, rc); Stream = NULL; // So we can know whether table is open } // end of CloseTableFile