Added command line option '-v'

This commit is contained in:
Klaus Schmidinger 2000-07-28 13:44:31 +02:00
parent 7ac97639da
commit 92096e097a
6 changed files with 51 additions and 16 deletions

View File

@ -105,3 +105,4 @@ Video Disk Recorder Revision History
- When scrolling through a list it now moves a full page up or down when the
cursor reaches the top or bottom of the menu (thanks to Heino Goldenstein!).
- Added missing '#include <sys/stat.h>' to recording.c.
- The video directory can now be defined with the command line option -v.

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: recording.c 1.13 2000/07/27 20:01:05 kls Exp $
* $Id: recording.c 1.14 2000/07/28 12:47:54 kls Exp $
*/
#define _GNU_SOURCE
@ -32,14 +32,14 @@
#define DISKCHECKDELTA 300 // seconds between checks for free disk space
const char *BaseDir = "/video";
const char *VideoDirectory = "/video";
static bool LowDiskSpace(void)
{
//TODO Find a simpler way to determine the amount of free disk space!
bool result = true;
char *cmd = NULL;
asprintf(&cmd, DFCMD, BaseDir);
asprintf(&cmd, DFCMD, VideoDirectory);
FILE *p = popen(cmd, "r");
if (p) {
char *s;
@ -124,7 +124,7 @@ cRecording::cRecording(const char *FileName)
{
titleBuffer = NULL;
fileName = strdup(FileName);
FileName += strlen(BaseDir) + 1;
FileName += strlen(VideoDirectory) + 1;
char *p = strrchr(FileName, '/');
name = NULL;
@ -190,7 +190,7 @@ const char *cRecording::FileName(void)
{
if (!fileName) {
struct tm *t = localtime(&start);
asprintf(&fileName, NAMEFORMAT, BaseDir, name, t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, priority, lifetime);
asprintf(&fileName, NAMEFORMAT, VideoDirectory, name, t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, priority, lifetime);
if (fileName)
strreplace(fileName, ' ', '_');
}
@ -262,7 +262,7 @@ bool cRecordings::Load(bool Deleted)
Clear();
bool result = false;
char *cmd = NULL;
asprintf(&cmd, FINDCMD, BaseDir, Deleted ? "*" DELEXT : "*" RECEXT);
asprintf(&cmd, FINDCMD, VideoDirectory, Deleted ? "*" DELEXT : "*" RECEXT);
FILE *p = popen(cmd, "r");
if (p) {
char *s;

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: recording.h 1.7 2000/07/23 19:06:14 kls Exp $
* $Id: recording.h 1.8 2000/07/28 12:48:06 kls Exp $
*/
#ifndef __RECORDING_H
@ -14,6 +14,8 @@
#include "config.h"
#include "tools.h"
extern const char *VideoDirectory;
void AssertFreeDiskSpace(void);
class cRecording : public cListObject {

20
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.10 2000/07/23 13:16:54 kls Exp $
* $Id: tools.c 1.11 2000/07/28 13:22:10 kls Exp $
*/
#define _GNU_SOURCE
@ -145,6 +145,24 @@ bool isnumber(const char *s)
return true;
}
bool DirectoryOk(const char *DirName)
{
struct stat ds;
if (stat(DirName, &ds) == 0) {
if (S_ISDIR(ds.st_mode)) {
if (access(DirName, R_OK | W_OK | X_OK) == 0)
return true;
else
esyslog(LOG_ERR, "ERROR: can't access %s", DirName);
}
else
esyslog(LOG_ERR, "ERROR: %s is not a directory", DirName);
}
else
LOG_ERROR_STR(DirName);
return false;
}
bool MakeDirs(const char *FileName, bool IsDirectory)
{
bool result = true;

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.10 2000/07/23 13:16:37 kls Exp $
* $Id: tools.h 1.11 2000/07/28 13:02:05 kls Exp $
*/
#ifndef __TOOLS_H
@ -43,6 +43,7 @@ char *skipspace(char *s);
int time_ms(void);
void delay_ms(int ms);
bool isnumber(const char *s);
bool DirectoryOk(const char *DirName);
bool MakeDirs(const char *FileName, bool IsDirectory = false);
bool RemoveFileOrDir(const char *FileName);
bool CheckProcess(pid_t pid);

27
vdr.c
View File

@ -22,7 +22,7 @@
*
* The project's page is at http://www.cadsoft.de/people/kls/vdr
*
* $Id: vdr.c 1.23 2000/07/23 15:36:43 kls Exp $
* $Id: vdr.c 1.24 2000/07/28 13:14:19 kls Exp $
*/
#include <getopt.h>
@ -65,20 +65,24 @@ int main(int argc, char *argv[])
{ "daemon", no_argument, NULL, 'd' },
{ "help", no_argument, NULL, 'h' },
{ "port", required_argument, NULL, 'p' },
{ "video", required_argument, NULL, 'v' },
{ 0 }
};
int c;
int option_index = 0;
while ((c = getopt_long(argc, argv, "dhp:", long_options, &option_index)) != -1) {
while ((c = getopt_long(argc, argv, "dhp:v:", long_options, &option_index)) != -1) {
switch (c) {
case 'd': DaemonMode = true; break;
case 'h': printf("Usage: vdr [OPTION]\n\n"
" -h, --help display this help and exit\n"
" -d, --daemon run in daemon mode\n"
" -p PORT, --port=PORT use PORT for SVDRP ('0' turns off SVDRP)\n"
" -p PORT, --port=PORT use PORT for SVDRP (default: %d, '0' turns off SVDRP)\n"
" -v DIR, --video=DIR use DIR as video directory (default is %s)\n"
"\n"
"Report bugs to <vdr-bugs@cadsoft.de>\n"
"Report bugs to <vdr-bugs@cadsoft.de>\n",
DEFAULTSVDRPPORT,
VideoDirectory
);
return 0;
break;
@ -86,9 +90,11 @@ int main(int argc, char *argv[])
SVDRPport = strtol(optarg, NULL, 10);
else {
fprintf(stderr, "vdr: invalid port number: %s\n", optarg);
return 1;
abort();
}
break;
case 'v': VideoDirectory = optarg;
break;
default: abort();
}
}
@ -97,6 +103,13 @@ int main(int argc, char *argv[])
openlog("vdr", LOG_PID | LOG_CONS, LOG_USER);
// Check the video directory:
if (!DirectoryOk(VideoDirectory)) {
fprintf(stderr, "vdr: can't access video directory %s\n", VideoDirectory);
abort();
}
// Daemon mode:
if (DaemonMode) {
@ -105,7 +118,7 @@ int main(int argc, char *argv[])
if (pid < 0) {
fprintf(stderr, "%s\n", strerror(errno));
esyslog(LOG_ERR, strerror(errno));
return 1;
abort();
}
if (pid != 0)
return 0; // initial program immediately returns
@ -122,7 +135,7 @@ int main(int argc, char *argv[])
// DVB interfaces:
if (!cDvbApi::Init())
return 1;
abort();
// Configuration data: