summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoranbr <vdr07@deltab.de>2010-12-26 18:25:30 +0100
committeranbr <vdr07@deltab.de>2010-12-26 18:25:30 +0100
commitbb79315df2cacf2c4c2a5a4d457a5f764bc3159e (patch)
tree888f58c42b7ee42fbe8de6366ef2fa0c786ca03b
parentc1d1893712af186e2c5c1c2e9ce87d28b346f85a (diff)
downloadvdr-plugin-dvdswitch-bb79315df2cacf2c4c2a5a4d457a5f764bc3159e.tar.gz
vdr-plugin-dvdswitch-bb79315df2cacf2c4c2a5a4d457a5f764bc3159e.tar.bz2
Parse mountpoint - use posix function
-rw-r--r--commands.c116
-rw-r--r--commands.h122
-rw-r--r--tools.h4
3 files changed, 124 insertions, 118 deletions
diff --git a/commands.c b/commands.c
index d617f71..05a5e66 100644
--- a/commands.c
+++ b/commands.c
@@ -1,4 +1,5 @@
#include <unistd.h>
+#include <mntent.h>
#include <vdr/tools.h>
#include "commands.h"
#include "imagelist.h"
@@ -853,3 +854,118 @@ eOSState cCMDImageRead::ProcessKey(eKeys Key)
return cOsdMenu::ProcessKey(Key);
}
+
+cCMDImageReadThread::cCMDImageReadThread(char *file, char *dir, int imgtype, cImageList &ImageList)
+{
+ dsyslog("ReadThread created");
+ File = NULL;
+ Dir = NULL;
+ FileType = tNone;
+
+ cImageListItem *item = ImageList.Get(imgtype);
+ if(imgtype >= 0 && file && dir)
+ {
+ if(item->GetFType() == tFile) {
+ if(0 >= asprintf(&File, "%s%s", file, item->GetValue()))
+ return;
+ }
+ else
+ File = strdup(file);
+ Dir = strdup(dir);
+ FileType = item->GetFType();
+ }
+}
+
+cCMDImageReadThread::~cCMDImageReadThread(void)
+{
+ free(File);
+ free(Dir);
+}
+
+void cCMDImageReadThread::Action(void)
+{
+ dsyslog("ReadThread started");
+ if(File && Dir && FileType != tNone)
+ {
+ dsyslog("ReadThread executed");
+ char *cmd = NULL;
+ char *mountpoint = NULL;
+
+ char buffer[MaxFileName];
+ if(realpath(DVDSwitchSetup.DVDLinkOrg, buffer)) {
+
+ FILE *f = setmntent("/etc/fstab", "r");
+ if(f) {
+ struct mntent *m;
+ while ((m = getmntent(f))) {
+ dsyslog("%s %s %s", m->mnt_fsname, m->mnt_dir, m->mnt_type);
+ if( m && m->mnt_fsname && m->mnt_dir &&
+ (0 == strcmp(m->mnt_fsname, DVDSwitchSetup.DVDLinkOrg)
+ || 0 == strcmp(m->mnt_fsname, buffer))) {
+ mountpoint = strdup(m->mnt_dir);
+ break;
+ }
+
+ }
+ endmntent(f);
+ }
+ if(0 < asprintf(&cmd,
+ "'%s' '%s' '%s' '%s' '%s' '%s'",
+ DVDSwitchSetup.DVDReadScript,
+ Dir,
+ File,
+ buffer,
+ mountpoint ? mountpoint : "",
+ (FileType == tFile) ? "IMAGE" : "DIR")) {
+ dsyslog("ReadThread call: %s", cmd);
+ int rc = system(cmd);
+ dsyslog("ReadThread return value: %i", rc);
+ FREENULL(cmd);
+ }
+ FREENULL(mountpoint);
+ }
+ }
+ delete(this);
+}
+
+
+/******************************************************************************/
+
+cCMDImageBurnThread::cCMDImageBurnThread(const char *file, eFileInfo type)
+{
+ dsyslog("BurnThread created");
+ File = NULL;
+ FileType = tNone;
+
+ if(file && type != tNone)
+ {
+ File = strdup(file);
+ FileType = type;
+ }
+}
+cCMDImageBurnThread::~cCMDImageBurnThread(void)
+{
+ free(File);
+}
+
+void cCMDImageBurnThread::Action(void)
+{
+ dsyslog("BurnThread started");
+ if(File && FileType != tNone)
+ {
+ dsyslog("BurnThread executed");
+ char *cmd;
+ if(0 < asprintf(&cmd,
+ "'%s' '%s' '%s'",
+ DVDSwitchSetup.DVDWriteScript,
+ File,
+ FileType == tFile ? "IMAGE" : "DIR")) {
+ dsyslog("BurnThread call: %s", cmd);
+ int rc = system(cmd);
+ dsyslog("BurnThread return value: %i", rc);
+ FREENULL(cmd);
+ }
+ }
+ delete(this);
+};
+
diff --git a/commands.h b/commands.h
index 3457b3b..1e9d112 100644
--- a/commands.h
+++ b/commands.h
@@ -141,90 +141,10 @@ class cCMDImageReadThread : public cThread
char *Dir;
eFileInfo FileType;
protected:
- virtual void Action(void)
- {
- dsyslog("ReadThread started");
- if(File && Dir && FileType != tNone)
- {
- dsyslog("ReadThread executed");
- char *cmd = NULL;
- char *output = NULL;
- char *mountpoint = NULL;
- int step = 0;
- cTokenizer *token = NULL;
- char buffer[MaxFileName];
- if(realpath(DVDSwitchSetup.DVDLinkOrg, buffer)) {
- while(!mountpoint && step < 2) {
- step++;
- if(0 < asprintf(&cmd,
- "cat /etc/fstab | grep -e \"%s\" | grep -e \"^[^#]\"",
- step == 1 ? DVDSwitchSetup.DVDLinkOrg : buffer)) {
- dsyslog("ReadThread call: %s", cmd);
-
- FILE *p = popen(cmd, "r");
- if(p)
- {
-#if VDRVERSNUM >= 10318
- cReadLine rl;
- output = rl.Read(p);
-#else
- output = readline(p);
-#endif
- pclose(p);
- }
- token = new cTokenizer(output, " ");
- if(token->Count() > 1) {
- char* s = strdup(token->GetToken(2));
- mountpoint = stripspace(s);
- }
- DELETENULL(token);
- }
- FREENULL(cmd);
- }
- if(0 < asprintf(&cmd,
- "'%s' '%s' '%s' '%s' '%s' '%s'",
- DVDSwitchSetup.DVDReadScript,
- Dir,
- File,
- buffer,
- mountpoint,
- (FileType == tFile) ? "IMAGE" : "DIR")) {
- dsyslog("ReadThread call: %s", cmd);
- int rc = system(cmd);
- dsyslog("ReadThread return value: %i", rc);
- FREENULL(cmd);
- }
- FREENULL(mountpoint);
- }
- }
- delete(this);
- };
+ virtual void Action(void);
public:
- cCMDImageReadThread(char *file, char *dir, int imgtype, cImageList &ImageList)
- {
- dsyslog("ReadThread created");
- File = NULL;
- Dir = NULL;
- FileType = tNone;
-
- cImageListItem *item = ImageList.Get(imgtype);
- if(imgtype >= 0 && file && dir)
- {
- if(item->GetFType() == tFile) {
- if(0 >= asprintf(&File, "%s%s", file, item->GetValue()))
- return;
- }
- else
- File = strdup(file);
- Dir = strdup(dir);
- FileType = item->GetFType();
- }
- }
- ~cCMDImageReadThread(void)
- {
- free(File);
- free(Dir);
- }
+ cCMDImageReadThread(char *file, char *dir, int imgtype, cImageList &ImageList);
+ virtual ~cCMDImageReadThread(void);
};
class cCMDImageBurnThread : public cThread
@@ -233,40 +153,10 @@ class cCMDImageBurnThread : public cThread
char *File;
eFileInfo FileType;
protected:
- virtual void Action(void)
- {
- dsyslog("BurnThread started");
- if(File && FileType != tNone)
- {
- dsyslog("BurnThread executed");
- char *cmd;
- if(0 < asprintf(&cmd,
- "'%s' '%s' '%s'",
- DVDSwitchSetup.DVDWriteScript,
- File,
- FileType == tFile ? "IMAGE" : "DIR")) {
- dsyslog("BurnThread call: %s", cmd);
- int rc = system(cmd);
- dsyslog("BurnThread return value: %i", rc);
- FREENULL(cmd);
- }
- }
- delete(this);
- };
+ virtual void Action(void);
public:
- cCMDImageBurnThread(const char *file, eFileInfo type)
- {
- dsyslog("BurnThread created");
- File = NULL;
- FileType = tNone;
-
- if(file && type != tNone)
- {
- File = strdup(file);
- FileType = type;
- }
- }
- ~cCMDImageBurnThread(void) { free(File); }
+ cCMDImageBurnThread(const char *file, eFileInfo type);
+ virtual ~cCMDImageBurnThread(void);
};
#endif // __COMMANDS_DVDSWITCH_H
diff --git a/tools.h b/tools.h
index 6484bc9..edae6df 100644
--- a/tools.h
+++ b/tools.h
@@ -20,7 +20,7 @@ class cFileDelThread : public cThread
virtual void Action(void);
public:
cFileDelThread(const char *file);
- ~cFileDelThread(void);
+ virtual ~cFileDelThread(void);
bool OK(void) { return Ok; };
};
@@ -36,7 +36,7 @@ class cFileMoveThread : public cThread
virtual void Action(void);
public:
cFileMoveThread(const char *file, char *dest);
- ~cFileMoveThread(void);
+ virtual ~cFileMoveThread(void);
bool OK(void) { return Ok; };
};