Replaced broken code in recent_sessions.cc
The original broken code was intended to stop using ifstream and ofstream to open files, but it used a very old MSVCism to open streams from FILE*. In the case for reading, this patch replaces that code by using standard c file manipulation to read the data into a stringstream, and then it uses the existing stream-based code to read from there. Similarly the ofstream in the code for writing the recent files list is replaced by a stringstream, and then a c-string is extracted from it and written using standard c file manipulation. Also tweaked a couple of typos from rgareus :)
This commit is contained in:
parent
929db238c9
commit
036ebab8a0
@ -21,6 +21,7 @@
|
||||
#include <cerrno>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <algorithm>
|
||||
|
||||
#include <glib/gstdio.h>
|
||||
@ -60,7 +61,26 @@ ARDOUR::read_recent_sessions (RecentSessions& rs)
|
||||
}
|
||||
}
|
||||
|
||||
ifstream recent (fin);
|
||||
|
||||
|
||||
// Read the file into a std::string;
|
||||
std::stringstream recent;
|
||||
char temporaryBuffer[1024];
|
||||
while (!feof(fin))
|
||||
{
|
||||
size_t charsRead = fread(&temporaryBuffer[0], sizeof(char), 1024, fin);
|
||||
if (charsRead != 1024 && ferror(fin))
|
||||
{
|
||||
error << string_compose (_("Error reading recent session file %1 (%2)"), path, strerror (errno)) << endmsg;
|
||||
fclose(fin);
|
||||
return -1;
|
||||
}
|
||||
recent << &temporaryBuffer[0];
|
||||
}
|
||||
|
||||
|
||||
|
||||
//ifstream recent (fin);
|
||||
|
||||
while (true) {
|
||||
|
||||
@ -131,18 +151,33 @@ ARDOUR::write_recent_sessions (RecentSessions& rs)
|
||||
}
|
||||
|
||||
{
|
||||
ofstream recent (fout);
|
||||
stringstream recent;
|
||||
//ofstream recent (fout);
|
||||
|
||||
if (!recent) {
|
||||
fclose (fout);
|
||||
return -1;
|
||||
}
|
||||
// if (!recent) {
|
||||
// fclose (fout);
|
||||
// return -1;
|
||||
// }
|
||||
|
||||
for (RecentSessions::iterator i = rs.begin(); i != rs.end(); ++i) {
|
||||
recent << (*i).first << '\n' << (*i).second << endl;
|
||||
}
|
||||
|
||||
string recentString = recent.str();
|
||||
size_t writeSize = recentString.length();
|
||||
|
||||
fwrite(recentString.c_str(), sizeof(char), writeSize, fout);
|
||||
|
||||
if (ferror(fout))
|
||||
{
|
||||
error << string_compose (_("Error writing recent sessions file %1 (%2)"), recent_file_name, strerror (errno)) << endmsg;
|
||||
fclose(fout);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
fclose (fout);
|
||||
|
||||
return 0;
|
||||
@ -239,4 +274,3 @@ ARDOUR::remove_recent_sessions (const string& path)
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user