summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2006-06-17 09:48:50 +0200
committerKlaus Schmidinger <vdr@tvdr.de>2006-06-17 09:48:50 +0200
commit9fe7b98cdb656c8c6f0a0ea7bc2d5cfa68696c02 (patch)
treebe92cba5f850f725747d7371342123c542187792
parent182224b65f42113829bb85b5cb1fd9a209754fe4 (diff)
downloadvdr-9fe7b98cdb656c8c6f0a0ea7bc2d5cfa68696c02.tar.gz
vdr-9fe7b98cdb656c8c6f0a0ea7bc2d5cfa68696c02.tar.bz2
Fixed handling relative link targets in the ReadLink() function
-rw-r--r--CONTRIBUTORS1
-rw-r--r--HISTORY4
-rw-r--r--tools.c22
3 files changed, 12 insertions, 15 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 730d5b66..5e522b9a 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -1794,6 +1794,7 @@ Ingo Schneider <mail@ingo-schneider.de>
Patrick Cernko <errror@errror.org>
for suggesting to add a note about "modprobe capability" to INSTALL
+ for reporting a problem with relative link targets in the ReadLink() function
Philippe Gramoullé <philippe@gramoulle.com>
for reporting a a missing '-' in the example for viewing a grabbed image on a remote
diff --git a/HISTORY b/HISTORY
index 6f5600db..5fb2bf58 100644
--- a/HISTORY
+++ b/HISTORY
@@ -4783,7 +4783,7 @@ Video Disk Recorder Revision History
so that they can be suppressed in normal operation mode to avoid clogging the
log file in case this function is used frequently (suggested by Helmut Auer).
-2006-06-16: Version 1.4.1-1
+2006-06-17: Version 1.4.1-1
- Added "-fPIC" to the compiler options in Make.config.template when compiling
plugins (thanks to Udo Richter). If you use your own Make.config file, you may
@@ -4797,3 +4797,5 @@ Video Disk Recorder Revision History
- Modified rcu.c to better handle RC5 codes.
- Added a missing variable initialization in cRingBufferLinear::cRingBufferLinear()
(thanks to Prakash Punnoor).
+- Fixed handling relative link targets in the ReadLink() function (reported by
+ Patrick Cernko).
diff --git a/tools.c b/tools.c
index 475afdb8..5869bf08 100644
--- a/tools.c
+++ b/tools.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: tools.c 1.118 2006/05/26 10:10:31 kls Exp $
+ * $Id: tools.c 1.119 2006/06/17 09:45:32 kls Exp $
*/
#include "tools.h"
@@ -480,22 +480,16 @@ int DirSizeMB(const char *DirName)
char *ReadLink(const char *FileName)
{
- char RealName[PATH_MAX];
- const char *TargetName = NULL;
- int n = readlink(FileName, RealName, sizeof(RealName) - 1);
- if (n < 0) {
- if (errno == ENOENT || errno == EINVAL) // file doesn't exist or is not a symlink
- TargetName = FileName;
+ if (!FileName)
+ return NULL;
+ char *TargetName = canonicalize_file_name(FileName);
+ if (!TargetName) {
+ if (errno == ENOENT) // file doesn't exist
+ TargetName = strdup(FileName);
else // some other error occurred
LOG_ERROR_STR(FileName);
}
- else if (n < int(sizeof(RealName))) { // got it!
- RealName[n] = 0;
- TargetName = RealName;
- }
- else
- esyslog("ERROR: symlink's target name too long: %s", FileName);
- return TargetName ? strdup(TargetName) : NULL;
+ return TargetName;
}
bool SpinUpDisk(const char *FileName)