This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Can not open file
- From: "Karl Gangle" <kgangle72 at attbi dot com>
- To: <gcc-help at gcc dot gnu dot org>
- Date: Sat, 8 Mar 2003 15:07:36 -0600
- Subject: Can not open file
Hi,
I am porting a program from a previous version of Linux. In the older
version of Linux the program works fine. But, in the new version the
program has several problems. I am having trouble opening a file with the
following program module. See the section marked with 11111's. What needs
to be done to open the file?
Thank you.
Karl Gangle
Source file.h:
#ifndef SourceFile_Header
#define SourceFile_Header
#include <fstream>
#include <string>
#include <iostream>
class SourceFile {
private:
ifstream infile;
int filesize;
int bufferpostn;
char *buffer;
char filename[ 50 ];
public:
SourceFile( void ) { filesize=0; bufferpostn=0; }
~SourceFile( void ) { delete buffer; }
void FileSize( char * );
void BufferFile( char * );
virtual char *gettoken( void );
virtual char *peektoken( void );
virtual void OpenFile( char * );
virtual void CloseFile( void );
virtual bool eosf( void );
virtual bool eosl( void );
bool eob( void );
char get( void );
char peek( void );
void seekp( int );
int getbufferpostn( void );
};
#endif
Source File.cpp:
// gettoken and peektoken
#include "SourceFile1.h"
#include <string>
using namespace std;
void SourceFile::OpenFile( char *fname ) {
strcpy( filename, fname );
cout << "filename: " << fname << endl << flush;
FileSize( filename );
BufferFile( filename );
}
void SourceFile::BufferFile( char *fname ) {
//11111111111111111111111111111111111111111111111111111111111
// the following line does not open the file fname.
infile.open( fname );
//11111111111111111111111111111111111111111111111111111111111
buffer = new char[ filesize ];
for ( bufferpostn=0; bufferpostn < filesize; bufferpostn++ )
buffer[ bufferpostn ] = infile.get();
infile.close();
cout << "filesize: " << filesize << endl << flush;
bufferpostn = 0;
}
void SourceFile::CloseFile( void ) {
infile.close();
delete[] buffer;
}
void SourceFile::FileSize( char *fname ) {
cout << "filesize-filename: " << fname << endl << flush;
infile.open( fname );
for ( filesize=0; !infile.eof(); filesize++ )
infile.get();
filesize--; // less the -1 for end of file.
infile.close();
}
char SourceFile::get( void ) {
if ( bufferpostn < 0 )
return buffer[ 0 ];
else
if ( bufferpostn >= filesize )
return buffer[ filesize-1 ];
else
return buffer[ bufferpostn++ ];
}
char SourceFile::peek( void ) {
if ( bufferpostn < 0 )
return buffer[ 0 ];
else
if ( bufferpostn >= filesize )
return buffer[ filesize-1 ];
else
return buffer[ bufferpostn ];
}
void SourceFile::seekp( int postn ) {
if ( postn < 0 )
bufferpostn=0;
else
if ( postn > filesize )
bufferpostn = filesize;
else
bufferpostn = postn;
}
int SourceFile::getbufferpostn( void ) {
return bufferpostn;
}
bool SourceFile::eob( void ) {
if ( bufferpostn == filesize )
return true;
else
return false;
}
bool SourceFile::eosf( void ) {
int notatend=0, i, orginalfilepostn;
char peektoken;
int filepostn;
orginalfilepostn = getbufferpostn();
for ( i=orginalfilepostn; i<(orginalfilepostn+10) && i<filesize; i++ ) {
seekp( i );
peektoken = peek();
if ( i != filesize ) {
if ( isalnum( peektoken ) )
notatend++;
else {
if ( peektoken==',' || peektoken==';' || peektoken==':' ||
peektoken=='{' || peektoken=='}' || peektoken=='(' ||
peektoken==')' ) {
notatend++;
}
}
}
} // for
seekp( orginalfilepostn ); // Set buffer index back to orginal position.
if ( notatend > 0 )
return false; // Not at end of file.
else
return true;
}
bool SourceFile::eosl( void ) {
char c;
c=peek();
return (c=='\n' ? true:false);
}
char *SourceFile::gettoken( void ) {
int done = 1, pdone=1, count=0;
string token;
char peektoken=0;
static char tokenstr[ 50 ];
token.assign( 20, '\0' );
if ( getbufferpostn() != filesize ) {
while( done ) {
do {
peektoken = peek();
if ( getbufferpostn() == filesize ) {
strcpy( tokenstr, "" );
return tokenstr;
}
if ( count == 0 && (peektoken == '\r' || peektoken == '\n' ||
peektoken == ' ') )
get();
else
pdone = 0;
}
while ( pdone );
if ( ( peektoken==',' || peektoken==';' || peektoken==':' ||
peektoken=='{' || peektoken=='}' || peektoken=='(' ||
peektoken==')' || peektoken==' ' || peektoken=='\n' ||
peektoken=='.' ||
peektoken=='#' || peektoken=='\"' || peektoken=='*' ||
peektoken=='&' ) ) {
if ( peektoken == ':' && count == 0 ) {
token = get();
if ( peek() == ':' )
token += get();
}
else
if ( peektoken == ' ' )
get();
else
if ( peektoken != ' ' && count == 0 )
token = get();
done = 0;
}
else {
if ( count==0 )
token = get();
else
token += get();
count++;
}
}
}
else {
cerr << "\nERROR: Premature end of file\n";
cerr.flush();
exit(-1);
}
strcpy( tokenstr, token.c_str() );
return tokenstr;
}
char *SourceFile::peektoken( void ) {
int done = 1, i, count=0, pdone=1, orginalfilepostn=0;
char peektoken = 0;
string token( 20, '\0');
static char tokenstr[ 50 ];
orginalfilepostn = getbufferpostn();
if ( getbufferpostn() != filesize ) {
while( done ) {
do {
peektoken = peek();
if ( getbufferpostn() == filesize ) {
cerr << "\nERROR: Premature end of file\n";
cerr.flush();
exit(-1);
}
if ( (peektoken=='\r' || peektoken=='\n' || peektoken==' ') &&
count==0 )
get();
else
pdone = 0;
}
while ( pdone );
if ( (peektoken==',' || peektoken==';' || peektoken==':' ||
peektoken=='{' || peektoken=='}' || peektoken=='(' ||
peektoken==')' || peektoken==' ' || peektoken=='#' ||
peektoken=='.' ||
peektoken=='\"' || peektoken=='*' || peektoken=='&' ||
peektoken=='\n' ) ) {
if ( peektoken == ':' && count == 0 ) {
token = get();
if ( peek() == ':' ) {
token += get();
}
}
else
if ( peektoken != ' ' && count == 0 )
token = peektoken;
done = 0;
}
else {
if ( count==0 )
token = get();
else
token += get();
count++;
}
} // while
}
seekp( orginalfilepostn ); // set back to orginal file buffer position
strcpy( tokenstr, token.c_str() );
return tokenstr;
}