示例#1
0
文件: Config.cpp 项目: edeproject/svn
bool Config::save(const char* fname) {
	E_ASSERT(fname != NULL);

	TempFile t;
	if(!t.create(".etmp.XXXXXX")) {
		errcode = CONF_ERR_FILE;
		return false;
	}

	/* so we could explicitly handle our options */
	t.set_no_close(true);
	t.set_auto_delete(false);

	FILE *f = t.fstream();

	SectionListIter sit = section_list.begin(), sit_end = section_list.end();
	unsigned int sz = section_list.size();
	EntryListIter eit;

	for (; sit != sit_end; ++sit, --sz) {
		fprintf(f, "[%s]\n", (*sit)->sname);

		for (eit = (*sit)->entry_list.begin(); eit != (*sit)->entry_list.end(); ++eit)
			fprintf(f, "%s=%s\n", (*eit)->key, (*eit)->value);

		/* prevent unneeded newline at the end of file */
		if(sz != 1)
			fprintf(f, "\n");
	}

	/* explicitly flush */
	fflush(f);
	t.close();

	E_ASSERT(t.name() && "Temporary name NULL. Report this as bug");

	if(rename(t.name(), fname) != 0) {
		E_WARNING("Unable to save to '%s'\n", fname);
		return false;
	} 

	chmod(fname, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH);
	return true;
}
示例#2
0
#include <edelib/TempFile.h>
#include <edelib/FileTest.h>
#include "UnitTest.h"

EDELIB_NS_USE

UT_FUNC(TempFileTest, "Test TempFile")
{
	TempFile t, t2, t3;

	UT_VERIFY(t.create("foo-temp.XXXXXX") == true);
	UT_VERIFY(t == true);

	UT_VERIFY(file_test(t.name(), FILE_TEST_IS_REGULAR | FILE_TEST_IS_WRITEABLE));

	t.unlink();
	UT_VERIFY(file_test(t.name(), FILE_TEST_IS_REGULAR) == false);

	UT_VERIFY(t2.create("baz-tmp") == true);
	UT_VERIFY(t2 == true);
	UT_VERIFY(file_test(t2.name(), FILE_TEST_IS_REGULAR | FILE_TEST_IS_WRITEABLE));
	UT_VERIFY(t2.fstream() != 0);
	t2.set_auto_delete(true);

	UT_VERIFY(t3.create("/this/file/should/not/exists") == false);
	UT_VERIFY(t3 == false);
}