diff options
author | anbr <vdr07@deltab.de> | 2010-12-26 18:25:30 +0100 |
---|---|---|
committer | anbr <vdr07@deltab.de> | 2010-12-26 18:25:30 +0100 |
commit | bb79315df2cacf2c4c2a5a4d457a5f764bc3159e (patch) | |
tree | 888f58c42b7ee42fbe8de6366ef2fa0c786ca03b | |
parent | c1d1893712af186e2c5c1c2e9ce87d28b346f85a (diff) | |
download | vdr-plugin-dvdswitch-bb79315df2cacf2c4c2a5a4d457a5f764bc3159e.tar.gz vdr-plugin-dvdswitch-bb79315df2cacf2c4c2a5a4d457a5f764bc3159e.tar.bz2 |
Parse mountpoint - use posix function
-rw-r--r-- | commands.c | 116 | ||||
-rw-r--r-- | commands.h | 122 | ||||
-rw-r--r-- | tools.h | 4 |
3 files changed, 124 insertions, 118 deletions
@@ -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); +}; + @@ -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 @@ -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; }; }; |