MCPcopy Create free account
hub / github.com/dhewm/dhewm3 / ReplaceSourceFileText

Method ReplaceSourceFileText

neo/framework/DeclManager.cpp:1957–2035  ·  view source on GitHub ↗

================= idDeclLocal::ReplaceSourceFileText ================= */

Source from the content-addressed store, hash-verified

1955=================
1956*/
1957bool idDeclLocal::ReplaceSourceFileText( void ) {
1958 int oldFileLength, newFileLength;
1959 char *buffer;
1960 idFile *file;
1961
1962 common->Printf( "Writing \'%s\' to \'%s\'...\n", GetName(), GetFileName() );
1963
1964 if ( sourceFile == &declManagerLocal.implicitDecls ) {
1965 common->Warning( "Can't save implicit declaration %s.", GetName() );
1966 return false;
1967 }
1968
1969 // get length and allocate buffer to hold the file
1970 oldFileLength = sourceFile->fileSize;
1971 newFileLength = oldFileLength - sourceTextLength + textLength;
1972 buffer = (char *) Mem_Alloc( Max( newFileLength, oldFileLength ) );
1973
1974 // read original file
1975 if ( sourceFile->fileSize ) {
1976
1977 file = fileSystem->OpenFileRead( GetFileName() );
1978 if ( !file ) {
1979 Mem_Free( buffer );
1980 common->Warning( "Couldn't open %s for reading.", GetFileName() );
1981 return false;
1982 }
1983
1984 if ( file->Length() != sourceFile->fileSize || file->Timestamp() != sourceFile->timestamp ) {
1985 Mem_Free( buffer );
1986 common->Warning( "The file %s has been modified outside of the engine.", GetFileName() );
1987 return false;
1988 }
1989
1990 file->Read( buffer, oldFileLength );
1991 fileSystem->CloseFile( file );
1992
1993 if ( MD5_BlockChecksum( buffer, oldFileLength ) != sourceFile->checksum ) {
1994 Mem_Free( buffer );
1995 common->Warning( "The file %s has been modified outside of the engine.", GetFileName() );
1996 return false;
1997 }
1998 }
1999
2000 // insert new text
2001 char *declText = (char *) _alloca( textLength + 1 );
2002 GetText( declText );
2003 memmove( buffer + sourceTextOffset + textLength, buffer + sourceTextOffset + sourceTextLength, oldFileLength - sourceTextOffset - sourceTextLength );
2004 memcpy( buffer + sourceTextOffset, declText, textLength );
2005
2006 // write out new file
2007 file = fileSystem->OpenFileWrite( GetFileName(), "fs_devpath" );
2008 if ( !file ) {
2009 Mem_Free( buffer );
2010 common->Warning( "Couldn't open %s for writing.", GetFileName() );
2011 return false;
2012 }
2013 file->Write( buffer, newFileLength );
2014 fileSystem->CloseFile( file );

Callers 7

OnBnClickedOkMethod · 0.45
OnBnClickedOkMethod · 0.45
OnBtnClickedSaveMethod · 0.45
OnBtnClickedPDAAddMethod · 0.45
OnBtnClickedEmailAddMethod · 0.45
OnBtnClickedEmailEditMethod · 0.45

Calls 14

Mem_AllocFunction · 0.85
MaxFunction · 0.85
Mem_FreeFunction · 0.85
MD5_BlockChecksumFunction · 0.85
OpenFileReadMethod · 0.80
CloseFileMethod · 0.80
OpenFileWriteMethod · 0.80
ReadFileMethod · 0.80
PrintfMethod · 0.45
WarningMethod · 0.45
LengthMethod · 0.45
TimestampMethod · 0.45

Tested by

no test coverage detected