Better error handling when writing configuration files

This commit is contained in:
Klaus Schmidinger 2001-09-16 08:57:58 +02:00
parent 9be288dbb4
commit 6ceefaf85f
5 changed files with 34 additions and 29 deletions

View File

@ -750,3 +750,4 @@ Video Disk Recorder Revision History
- Changed obsolete macro VIDEO_WINDOW_CHROMAKEY to VID_TYPE_CHROMAKEY (thanks
to Guido Fiala).
- New version of the "Master-Timer" tool (thanks to Matthias Schniedermeyer).
- Better error handling when writing configuration files.

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: config.c 1.70 2001/09/14 14:35:30 kls Exp $
* $Id: config.c 1.71 2001/09/16 08:57:58 kls Exp $
*/
#include "config.h"
@ -122,24 +122,14 @@ bool cKeys::Load(const char *FileName)
bool cKeys::Save(void)
{
bool result = true;
cSafeFile f(fileName);
if (f.Open()) {
if (fprintf(f, "Code\t%c\nAddress\t%04X\n", code, address) > 0) {
for (tKey *k = keys; k->type != kNone; k++) {
if (fprintf(f, "%s\t%08X\n", k->name, k->code) <= 0) {
result = false;
break;
}
}
}
else
result = false;
f.Close();
fprintf(f, "Code\t%c\nAddress\t%04X\n", code, address);
for (tKey *k = keys; k->type != kNone; k++)
fprintf(f, "%s\t%08X\n", k->name, k->code);
return f.Close();
}
else
result = false;
return result;
return false;
}
eKeys cKeys::Get(unsigned int Code)
@ -928,12 +918,11 @@ bool cSetup::Save(const char *FileName)
fprintf(f, "MultiSpeedMode = %d\n", MultiSpeedMode);
fprintf(f, "ShowReplayMode = %d\n", ShowReplayMode);
fprintf(f, "CurrentChannel = %d\n", CurrentChannel);
f.Close();
isyslog(LOG_INFO, "saved setup to %s", FileName);
return true;
if (f.Close()) {
isyslog(LOG_INFO, "saved setup to %s", FileName);
return true;
}
}
else
LOG_ERROR_STR(FileName);
}
else
esyslog(LOG_ERR, "attempt to save setup without file name");

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: config.h 1.77 2001/09/14 14:35:32 kls Exp $
* $Id: config.h 1.78 2001/09/15 15:38:40 kls Exp $
*/
#ifndef __CONFIG_H
@ -226,7 +226,8 @@ public:
}
l = (T *)l->Next();
}
f.Close();
if (!f.Close())
result = false;
}
else
result = false;

22
tools.c
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: tools.c 1.44 2001/09/14 14:35:37 kls Exp $
* $Id: tools.c 1.45 2001/09/15 15:41:16 kls Exp $
*/
#define _GNU_SOURCE
@ -554,13 +554,27 @@ bool cSafeFile::Open(void)
return f != NULL;
}
void cSafeFile::Close(void)
bool cSafeFile::Close(void)
{
bool result = true;
if (f) {
fclose(f);
if (ferror(f) != 0) {
LOG_ERROR_STR(tempName);
result = false;
}
if (fclose(f) < 0) {
LOG_ERROR_STR(tempName);
result = false;
}
f = NULL;
rename(tempName, fileName);
if (result && rename(tempName, fileName) < 0) {
LOG_ERROR_STR(fileName);
result = false;
}
}
else
result = false;
return result;
}
// --- cListObject -----------------------------------------------------------

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: tools.h 1.33 2001/09/14 14:35:40 kls Exp $
* $Id: tools.h 1.34 2001/09/15 15:22:57 kls Exp $
*/
#ifndef __TOOLS_H
@ -93,7 +93,7 @@ public:
~cSafeFile();
operator FILE* () { return f; }
bool Open(void);
void Close(void);
bool Close(void);
};
class cListObject {