From ae99c86041cb178462a0cc37d55940e1656abfb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Mon, 13 Mar 2006 18:22:59 +0000 Subject: [PATCH] Should now play much nicer with broken settings files. Fixes bug #165. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16768 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/apps/terminal/PrefHandler.cpp | 33 +++++++++++++++---------------- src/apps/terminal/PrefHandler.h | 11 ++++++----- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/apps/terminal/PrefHandler.cpp b/src/apps/terminal/PrefHandler.cpp index 967a5f3d8c..753a8615f9 100644 --- a/src/apps/terminal/PrefHandler.cpp +++ b/src/apps/terminal/PrefHandler.cpp @@ -1,4 +1,5 @@ /* + * Copyright (c) 2003-2006, Haiku, Inc. All Rights Reserved. * Copyright (c) 2004 Daniel Furrer * Copyright (c) 2003-4 Kian Duffy * Copyright (c) 1998,99 Kazuho Okui and Takashi Murai. @@ -29,7 +30,7 @@ /* * Startup preference settings. */ -static const prefDefaults kTermDefaults[] = { +static const pref_defaults kTermDefaults[] = { { PREF_COLS, "80" }, { PREF_ROWS, "25" }, @@ -70,9 +71,11 @@ PrefHandler::PrefHandler() : fContainer('Pref') { + _LoadFromDefault(kTermDefaults); + BPath path; GetDefaultPath(path); - OpenText(path.Path(), kTermDefaults); + OpenText(path.Path()); _ConfirmFont(PREF_HALF_FONT_FAMILY, be_fixed_font); _ConfirmFont(PREF_FULL_FONT_FAMILY, be_fixed_font); @@ -108,24 +111,16 @@ PrefHandler::GetDefaultPath(BPath& path) status_t -PrefHandler::Open(const char *path, const prefDefaults *defaults) +PrefHandler::Open(const char *path) { - BEntry entry(path); - if (entry.Exists()) - return _LoadFromFile(&entry); - - return _LoadFromDefault(defaults); + return _LoadFromFile(path); } status_t -PrefHandler::OpenText(const char *path, const prefDefaults *defaults) +PrefHandler::OpenText(const char *path) { - BEntry entry(path); - if (entry.Exists()) - return _LoadFromTextFile(path); - - return _LoadFromDefault(defaults); + return _LoadFromTextFile(path); } @@ -341,12 +336,16 @@ PrefHandler::_ConfirmFont(const char *key, const BFont *fallback) status_t -PrefHandler::_LoadFromFile(BEntry *entry) +PrefHandler::_LoadFromFile(const char* path) { // Future: It would be nice if we could simply use a flatened BMessage to // save the settings. (Who cares about compatibility in this case anyway?) - BFile file(entry, B_READ_ONLY); + BFile file(path, B_READ_ONLY); + status_t status = file.InitCheck(); + if (status != B_OK) + return status; + //fContainer.MakeEmpty(); //fContainer.Unflatten(&file); @@ -384,7 +383,7 @@ PrefHandler::_LoadFromFile(BEntry *entry) status_t -PrefHandler::_LoadFromDefault(const prefDefaults* defaults) +PrefHandler::_LoadFromDefault(const pref_defaults* defaults) { if (defaults == NULL) return B_ERROR; diff --git a/src/apps/terminal/PrefHandler.h b/src/apps/terminal/PrefHandler.h index 0f48cf895f..35422be2c7 100644 --- a/src/apps/terminal/PrefHandler.h +++ b/src/apps/terminal/PrefHandler.h @@ -1,4 +1,5 @@ /* + * Copyright (c) 2003-2006, Haiku, Inc. All Rights Reserved. * Copyright (c) 2004 Daniel Furrer * Copyright (c) 2003-4 Kian Duffy * Copyright (c) 1998,99 Kazuho Okui and Takashi Murai. @@ -43,7 +44,7 @@ struct termprefs { char unknown[3]; }; -struct prefDefaults { +struct pref_defaults { const char *key; char *item; }; @@ -60,8 +61,8 @@ class PrefHandler { PrefHandler(); ~PrefHandler(); - status_t Open(const char *name, const prefDefaults *defaults = NULL); - status_t OpenText(const char *path, const prefDefaults *defaults = NULL); + status_t Open(const char *name); + status_t OpenText(const char *path); status_t Save(const char *name); void SaveAsText(const char *path, const char *minmtype = NULL, const char *signature = NULL); @@ -84,8 +85,8 @@ class PrefHandler { private: void _ConfirmFont(const char *key, const BFont *fallback); - status_t _LoadFromFile(BEntry *ent); - status_t _LoadFromDefault(const prefDefaults* defaluts = NULL); + status_t _LoadFromFile(const char* path); + status_t _LoadFromDefault(const pref_defaults* defaults = NULL); status_t _LoadFromTextFile(const char * path); BMessage fContainer;