From 2d27c18f8b065e7fa7a0824007a24987c3650c6c Mon Sep 17 00:00:00 2001 From: skeezix Date: Mon, 23 Feb 2009 15:50:40 -0500 Subject: [PATCH] discovery code now recognizes pnd files Fixed a bunch of little bugs lieing around Almost there.. just need to fix up the exec-paths in the .desktop files, and add icon support.. and see TODO.. *cry* --- Makefile | 2 +- TODO.txt | 8 ++ include/pnd_pndfiles.h | 10 +++ lib/pnd_discovery.c | 92 +++++++++++++++++------ lib/pnd_pndfiles.c | 113 ++++++++++++++++++++++++++--- lib/pnd_pxml.c | 7 ++ lib/pnd_tinyxml.cpp | 16 +++- testdata/apps/sampleapp3/PXML.xml | 6 +- testdata/pndsample/x86_ls.pnd | Bin 0 -> 458527 bytes testdata/pndsample/x86_ls/PXML.xml | 86 ++++++++++++++++++++++ testdata/pndsample/x86_ls/ls | Bin 0 -> 96216 bytes testdata/scripts/pnd_make.sh | 7 ++ testdata/scripts/pnd_run.sh | 69 +++++++++++++----- 13 files changed, 356 insertions(+), 60 deletions(-) create mode 100644 testdata/pndsample/x86_ls.pnd create mode 100644 testdata/pndsample/x86_ls/PXML.xml create mode 100755 testdata/pndsample/x86_ls/ls create mode 100755 testdata/scripts/pnd_make.sh diff --git a/Makefile b/Makefile index f924fa2..90de4c4 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ LIB = libpnd.a SOLIB = libpnd.so.1 # canonicle name SOLIB1 = libpnd.so.1.0.1 # versioned name XMLOBJ = lib/tinyxml/tinystr.o lib/tinyxml/tinyxml.o lib/tinyxml/tinyxmlerror.o lib/tinyxml/tinyxmlparser.o -ALLOBJ = pnd_conf.o pnd_container.o pnd_discovery.o pnd_pxml.o pnd_notify.o pnd_locate.o pnd_tinyxml.o +ALLOBJ = pnd_conf.o pnd_container.o pnd_discovery.o pnd_pxml.o pnd_notify.o pnd_locate.o pnd_tinyxml.o pnd_pndfiles.o all: ${SOLIB} ${LIB} conftest discotest notifytest locatetest pndnotifyd diff --git a/TODO.txt b/TODO.txt index 77245c3..58ae80f 100644 --- a/TODO.txt +++ b/TODO.txt @@ -1,10 +1,18 @@ Some things to be done.. +- replace brute force memcmp() in pnd pnd with a fancy pants CS alg + - review pnd_tinyxml to ensure the PXML_FILENAME is csae insensitive as needed +- fix pnd_tinyxml.. why does it need 'if ( s )' protection. it assumes some filename weird stuff + - why does it need filenames at all for icons/etc?! + +- fix is_pxml_valid_app() .. right now it always returns 1! - make pnd_pndfiles seek of PXML more efficient; fread ( 1, nmemb ) gotta be slow :) +- make accrused PXML from pnd-buffer growable, not locked at 32k/X size + apps/pndnotifyd.c:// TODO: Catch HUP and reparse config apps/pndnotifyd.c:// TODO: Should perhaps direct all printf's through a vsprintf handler to avoid redundant "if ! g_daemon_mode" apps/pndnotifyd.c:// TODO: During daemon mode, should perhaps syslog or log errors diff --git a/include/pnd_pndfiles.h b/include/pnd_pndfiles.h index e141482..2abefba 100644 --- a/include/pnd_pndfiles.h +++ b/include/pnd_pndfiles.h @@ -18,12 +18,22 @@ extern "C" { // either if the goods are near the end. How big is an average .png for an average icon // size? #define PND_PXML_WINDOW_SIZE 4096 +#define PND_PXML_WINDOW_FRACTIONAL ( PND_PXML_WINDOW_SIZE - 10 ) // pnd_seek_pxml should vaguely work like fseek, trying to position at begin of the appended/found PXML // On return of 0, assuming nothing. // On 1, assume that the FILE pointer is positioned for next read to pull in the PXML line by line unsigned char pnd_pnd_seek_pxml ( FILE *f ); +// accrue_pxml will read through the given FILE * until it finds (case insensitively) +// Returns 1 on success ( found), leaving file pointer after the \n +// Returns 0 on failure (likely file pointer is at the end of the file, having sought out the +unsigned char pnd_pnd_accrue_pxml ( FILE *f, char *target, unsigned int maxlen ); + +// pnd_match_binbuf will find a case insensitve string within a binary buffer (ie: strcasestr will +// only work in a non-binary buffer.) Brute force zombies ahead! +char *pnd_match_binbuf ( char *haystack, unsigned int maxlen, char *needle ); + #ifdef __cplusplus } /* "C" */ #endif diff --git a/lib/pnd_discovery.c b/lib/pnd_discovery.c index 01f4c9a..9513087 100644 --- a/lib/pnd_discovery.c +++ b/lib/pnd_discovery.c @@ -1,6 +1,8 @@ #include /* for FILE etc */ #include /* for malloc */ + +#define __USE_GNU /* for strcasestr */ #include /* for making ftw.h happy */ #define _XOPEN_SOURCE 500 @@ -51,68 +53,112 @@ static int pnd_disco_callback ( const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf ) { unsigned char valid = 0; // 1 for plaintext PXML, 2 for PND... + pnd_pxml_handle pxmlh = 0; + + //printf ( "disco root callback encountered '%s'\n", fpath ); // PXML.xml is a possible application candidate (and not a dir named PXML.xml :) if ( typeflag & FTW_D ) { + //printf ( " .. is dir, skipping\n" ); return ( 0 ); // skip directories and other non-regular files } // PND/PNZ file and others may be valid as well .. but lets leave that for now + // printf ( "%s %s\n", fpath + ftwbuf -> base, PND_PACKAGE_FILEEXT ); if ( strcasecmp ( fpath + ftwbuf -> base, PXML_FILENAME ) == 0 ) { valid = 1; - } else if ( strcasecmp ( fpath + ftwbuf -> base, PND_PACKAGE_FILEEXT "\0" ) == 0 ) { + } else if ( strcasestr ( fpath + ftwbuf -> base, PND_PACKAGE_FILEEXT "\0" ) ) { valid = 2; } // if not a file of interest, just keep looking until we run out if ( ! valid ) { + //printf ( " .. bad filename, skipping\n" ); return ( 0 ); } // potentially a valid application if ( valid == 1 ) { // Plaintext PXML file - //printf ( "disco callback encountered '%s'\n", fpath ); - - pnd_pxml_handle pxmlh; + //printf ( "PXML: disco callback encountered '%s'\n", fpath ); // pick up the PXML if we can - pxmlh = pnd_pxml_fetch ( (char*) fpath ); - if ( ! pxmlh ) { - return ( 0 ); // continue the scan + } else if ( valid == 2 ) { + // PND ... ?? + FILE *f; + char pxmlbuf [ 32 * 1024 ]; // TBD: assuming 32k pxml accrual buffer is a little lame + + //printf ( "PND: disco callback encountered '%s'\n", fpath ); + + // is this a valid .pnd file? The filename is a candidate already, but verify.. + // .. presence of PXML appended, or at least contained within? + // .. presence of an icon appended after PXML? + + // open it up.. + f = fopen ( fpath, "r" ); + + // try to locate the PXML portion + if ( ! pnd_pnd_seek_pxml ( f ) ) { + fclose ( f ); + return ( 0 ); // pnd or not, but not to spec. Pwn'd the pnd? + } + + // accrue it into a buffer + if ( ! pnd_pnd_accrue_pxml ( f, pxmlbuf, 32 * 1024 ) ) { + fclose ( f ); + return ( 0 ); } + //printf ( "buffer is %s\n", pxmlbuf ); + //fflush ( stdout ); + + // by now, we have .. , try to parse.. + pxmlh = pnd_pxml_fetch_buffer ( (char*) fpath, pxmlbuf ); + + } + + // pxmlh is useful? + if ( pxmlh ) { + // look for any overrides, if requested pnd_pxml_merge_override ( pxmlh, disco_overrides ); // check for validity and add to resultset if it looks executable if ( pnd_is_pxml_valid_app ( pxmlh ) ) { + char b [ 1024 ]; // TBD: also lame pnd_disco_t *p; p = pnd_box_allocinsert ( disco_box, (char*) fpath, sizeof(pnd_disco_t) ); - p -> title_en = strdup ( pnd_pxml_get_app_name ( pxmlh ) ); - p -> icon = strdup ( pnd_pxml_get_icon_path ( pxmlh ) ); - p -> exec = strdup ( pnd_pxml_get_exec_path ( pxmlh ) ); - p -> unique_id = strdup ( pnd_pxml_get_unique_id ( pxmlh ) ); - p -> main_category = strdup ( pnd_pxml_get_primary_category ( pxmlh ) ); - p -> clockspeed = strdup ( pnd_pxml_get_clockspeed ( pxmlh ) ); - + if ( pnd_pxml_get_app_name ( pxmlh ) ) { + p -> title_en = strdup ( pnd_pxml_get_app_name ( pxmlh ) ); + } + if ( pnd_pxml_get_icon_path ( pxmlh ) ) { + p -> icon = strdup ( pnd_pxml_get_icon_path ( pxmlh ) ); + } + if ( pnd_pxml_get_exec_path ( pxmlh ) ) { + snprintf ( b, 1024, "pnd_run_magic %s", pnd_pxml_get_exec_path ( pxmlh ) ); + p -> exec = strdup ( b ); + } + if ( pnd_pxml_get_unique_id ( pxmlh ) ) { + p -> unique_id = strdup ( pnd_pxml_get_unique_id ( pxmlh ) ); + } + if ( pnd_pxml_get_primary_category ( pxmlh ) ) { + p -> main_category = strdup ( pnd_pxml_get_primary_category ( pxmlh ) ); + } + if ( pnd_pxml_get_clockspeed ( pxmlh ) ) { + p -> clockspeed = strdup ( pnd_pxml_get_clockspeed ( pxmlh ) ); + } + + } else { + //printf ( "Invalid PXML; skipping.\n" ); } // ditch pxml pnd_pxml_delete ( pxmlh ); - } else if ( valid == 2 ) { - // PND ... ?? - printf ( "PND: disco callback encountered '%s'\n", fpath ); - - // is this a valid .pnd file? The filename is a candidate already, but verify.. - // .. presence of PXML appeneded, or at least contained within? - // .. presence of an icon appended after PXML? - - } + } // got a pxmlh return ( 0 ); // continue the tree walk } diff --git a/lib/pnd_pndfiles.c b/lib/pnd_pndfiles.c index 2b5a542..a8f564c 100644 --- a/lib/pnd_pndfiles.c +++ b/lib/pnd_pndfiles.c @@ -1,7 +1,10 @@ #include /* for FILE etc */ #include /* for malloc */ -#include /* for making ftw.h happy */ +#include /* for isprint */ + +#define __USE_GNU +#include /* for making strcasestr happy */ #include "pnd_container.h" #include "pnd_pxml.h" @@ -9,34 +12,122 @@ #include "pnd_pndfiles.h" unsigned char pnd_pnd_seek_pxml ( FILE *f ) { - char *b; - unsigned int len; + char *b; // buffer + char *match; // match within buffer + unsigned int len; // length of file (not suporting 'big files' 2GB..) + unsigned int pos; // current tape head + unsigned int readable; // amount to read (for small files/chunks) - b = malloc ( PND_PXML_WINDOW_SIZE ); + b = malloc ( PND_PXML_WINDOW_SIZE + 1 ); if ( ! b ) { return ( 0 ); } - memset ( b, '\0', PND_PXML_WINDOW_SIZE ); + memset ( b, '\0', PND_PXML_WINDOW_SIZE + 1 ); // determine length of file fseek ( f, 0, SEEK_END ); - len = ftell ( f ); - fseek ( f, 0, SEEK_SET ); /* ready to scan through the file, backwards */ - //strcasestr ( b, PXML_TAGHEAD ); - + // easy case or no? + if ( len <= PND_PXML_WINDOW_SIZE ) { + pos = 0; + readable = len; + } else { + pos = len - PND_PXML_WINDOW_SIZE; + readable = PND_PXML_WINDOW_SIZE; + } + while ( 1 ) { + + printf ( "find pxml; pos %u readable %u\n", pos, readable ); + + // seek into this blocks position + fseek ( f, pos, SEEK_SET ); + + // read + fread ( b, 1, readable, f ); + + // find the head tag here? now, there are serious heavy duty algorithyms for locating + // strings within an arbitrary buffer. Thats needs to be done. This is the worst + // performing brute force strategy here. + if ( ( match = pnd_match_binbuf ( b, readable, PXML_TAGHEAD ) ) ) { + fseek ( f, pos + ( match - b ), SEEK_SET ); + printf ( " match found at %u\n", pos + ( match - b ) ); + free ( b ); + return ( 1 ); + } + + // no match, so we need to back up another chunk; if we can't + // back up that much, we're on our last check. if we can't back + // up at all, we've already been here and time to fail + if ( pos == 0 ) { + break; // done, FAIL + } else if ( pos > PND_PXML_WINDOW_FRACTIONAL ) { + pos -= PND_PXML_WINDOW_FRACTIONAL; + readable = PND_PXML_WINDOW_SIZE; + } else { + readable = PND_PXML_WINDOW_SIZE - pos; + memset ( b + pos, '\0', PND_PXML_WINDOW_SIZE - pos ); + pos = 0; + } + + } // while // exeunt, with alarums - free ( b ); + return ( 0 ); +} + +unsigned char pnd_pnd_accrue_pxml ( FILE *f, char *target, unsigned int maxlen ) { + char inbuf [ 1024 ]; // TBD: love all these assumptions? noob! + char *insert = target; + unsigned int l; + + while ( fgets ( inbuf, 1023, f ) ) { + + // copy inbuf onto end of target +#if 1 + strncpy ( insert, inbuf, maxlen ); + // reduce counter for max size so we can avoid buffer overruns + l = strlen ( inbuf ); + maxlen -= l; // reduce + insert += l; // increment +#else + strncat ( target, inbuf, maxlen ); +#endif + + if ( strcasestr ( inbuf, PXML_TAGFOOT ) ) { + return ( 1 ); + } + + } // while + + return ( 0 ); +} + +char *pnd_match_binbuf ( char *haystack, unsigned int maxlen, char *needle ) { + char *end = haystack + maxlen - strlen ( needle ); + unsigned int needlelen = strlen ( needle ); + + while ( haystack < end ) { + + if ( isprint(*haystack) ) { + + if ( strncasecmp ( haystack, needle, needlelen ) == 0 ) { + //printf ( "haystack %s\n", haystack ); + return ( haystack ); + } + + } + + haystack += 1; + } - return ( 1 ); + return ( NULL ); } diff --git a/lib/pnd_pxml.c b/lib/pnd_pxml.c index 5471ff6..ab134ef 100644 --- a/lib/pnd_pxml.c +++ b/lib/pnd_pxml.c @@ -112,12 +112,19 @@ unsigned char pnd_is_pxml_valid_app ( pnd_pxml_handle h ) { pnd_pxml_t *p = (pnd_pxml_t*) h; // for now, lets just verify the exec-path is valid + //printf ( "exec is '%s'\n", p -> exec ); + return ( 1 ); + + // even this is complicated by pnd_run.sh semantics .. can't check if it exists + // during discovery, since it is not mounted yet.. +#if 0 struct stat buf; if ( stat ( p -> exec, &buf ) == 0 ) { return ( 1 ); // path is present } +#endif return ( 0 ); } diff --git a/lib/pnd_tinyxml.cpp b/lib/pnd_tinyxml.cpp index 68e8f94..83f5082 100644 --- a/lib/pnd_tinyxml.cpp +++ b/lib/pnd_tinyxml.cpp @@ -93,8 +93,10 @@ unsigned char pnd_pxml_parse ( const char *pFilename, char *buffer, unsigned int char anotherbuffer [ FILENAME_MAX ]; strcpy ( anotherbuffer, pFilename ); char *s = strstr ( anotherbuffer, PXML_FILENAME ); - strcpy ( s, strdup(pElem->GetText())); - app->icon = strdup(anotherbuffer); + if ( s ) { + strcpy ( s, strdup(pElem->GetText())); + app->icon = strdup(anotherbuffer); + } } pElem = hRoot.FirstChild( "description" ).FirstChildElement("en").Element(); @@ -175,8 +177,14 @@ unsigned char pnd_pxml_parse ( const char *pFilename, char *buffer, unsigned int char anotherbuffer [ FILENAME_MAX ]; strcpy ( anotherbuffer, pFilename ); char *s = strstr ( anotherbuffer, PXML_FILENAME ); - strcpy ( s, strdup(pElem->GetText())); - app->exec = strdup(anotherbuffer); + if ( s ) { + strcpy ( s, strdup(pElem->GetText())); + app->exec = strdup(anotherbuffer); + } else if ( ( s = strrchr ( anotherbuffer, '/' ) ) ) { + s += 1; + strcpy ( s, strdup(pElem->GetText())); + app->exec = strdup(anotherbuffer); + } } pElem = hRoot.FirstChild( "category" ).FirstChildElement("main").Element(); diff --git a/testdata/apps/sampleapp3/PXML.xml b/testdata/apps/sampleapp3/PXML.xml index 72711e0..49a9106 100644 --- a/testdata/apps/sampleapp3/PXML.xml +++ b/testdata/apps/sampleapp3/PXML.xml @@ -1,13 +1,12 @@ - - <en>Program Title</en> + <en>sample 3</en> <de>Program Title in German Language</de> <fr>Program Title in French Language</fr> <it>Program Title in Italian Language</it> -127ulysis +256twinky Yes @@ -84,3 +83,4 @@ ../differentdir + diff --git a/testdata/pndsample/x86_ls.pnd b/testdata/pndsample/x86_ls.pnd new file mode 100644 index 0000000000000000000000000000000000000000..a3f11b45874e45be185ed779347bc93482f3f88d GIT binary patch literal 458527 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¥*iRhv4j^u3n95a|CuS^j)|&+0>?p+7+LdgM#a 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 literal 0 HcmV?d00001 diff --git a/testdata/pndsample/x86_ls/PXML.xml b/testdata/pndsample/x86_ls/PXML.xml new file mode 100644 index 0000000..87f9873 --- /dev/null +++ b/testdata/pndsample/x86_ls/PXML.xml @@ -0,0 +1,86 @@ + + + + <en>x86 ls</en> + <de>Program Title in German Language</de> + <fr>Program Title in French Language</fr> + <it>Program Title in Italian Language</it> + + +123456x86ls + +Yes + +program.png + + + This is the [b]English Description[/b] of the file. + Can use [i]multiple lines[/i] and BBCode. + The German Description + The Italian Description + The French Description + + + + ./preview/pic1.jpg + ./preview/pic2.jpg + + + + EvilDragon + http://www.openpandora.org + + + + 1 + 1 + 1 + 2 + + +program.exe + + +
Main category
+ Subcategory 1 + Subcategory 2 +
+ + +
Alternate category
+ Alternate Subcategory 1 + Alternate Subcategory 2 +
+ + + 1 + 1 + 1 + 2 + + + + View this Picture + jpg,bmp,gif + ­view + + + + Convert this Picture + jpg,bmp,gif + ­convert + + + + Watch This Movie + mpg,avi,wmv + ­convert + + +600 + +Yes + +../differentdir + +
diff --git a/testdata/pndsample/x86_ls/ls b/testdata/pndsample/x86_ls/ls new file mode 100755 index 0000000000000000000000000000000000000000..c250cd78acd9c17e0f6c76f69aca9adac88a50b9 GIT binary patch literal 96216 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 JPqBiHxS#rIwKo6& literal 0 HcmV?d00001 diff --git a/testdata/scripts/pnd_make.sh b/testdata/scripts/pnd_make.sh new file mode 100755 index 0000000..867f247 --- /dev/null +++ b/testdata/scripts/pnd_make.sh @@ -0,0 +1,7 @@ +#!/bin/bash +pkgname=$1 +folder=$3 +xml=$2 +mkisofs -o $pkgname.iso -R $folder +cat $pkgname.iso $xml > $pkgname +rm $pkgname.iso diff --git a/testdata/scripts/pnd_run.sh b/testdata/scripts/pnd_run.sh index d3f9083..eac2552 100644 --- a/testdata/scripts/pnd_run.sh +++ b/testdata/scripts/pnd_run.sh @@ -1,6 +1,8 @@ #!/bin/bash #input pnd_run.sh -p "/path/to/foobar.pnd" -e "exe" --a "arguments for exe" +# -u to skip union mount +# -b to override basename #output none ########################### FS NAMES NEED ADJUSTMENT ################# @@ -8,7 +10,7 @@ # check if all vars are set to sensible values # parse arguments -TEMP=`getopt -o p:e:a:: --long p-long,e-long:,a-long: -- "$@"` +TEMP=`getopt -o p:e:a:b:u:: --long p-long,e-long:,a-long: -- "$@"` if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi @@ -19,10 +21,9 @@ while true ; do case "$1" in -p|--p-long) echo "pnd set to \`$2'" ;PND=$2;shift 2;; -e|--e-long) echo "exec set to \`$2'" ;EXENAME=$2;shift 2 ;; + -u) echo "u set, no union pls!";UNION=1;shift 2 ;; + -b) echo "BASENAME set to $2";BASENAME=$2;shift 2;; -a|--a-long) - # a has an optional argument. As we are in quoted mode, - # an empty parameter will be generated if its optional - # argument is not found. case "$2" in "") echo "no arguments"; shift 2 ;; *) echo "args set to \`$2'" ;ARGUMENTS=$2;shift 2 ;; @@ -37,7 +38,11 @@ done #vars DFS=$(file -b $PND | awk '{ print $1 }') # is -p a zip iso or folder? MOUNTPOINT=$(df $PND | grep -vE '^Filesystem' | awk '{ print $6 }') #find out which mountpoint the pnd/folder is on -BASENAME=$(basename "$PND" | cut -d'.' -f1) #get basename (strip extension if file) for union mountpoints etc, maybe this should be changed to something specified inside the xml + +#if -b is set use that as basename, else generate it from PND +#get basename (strip extension if file) for union mountpoints etc, maybe this should be changed to something specified inside the xml +if [ ! $BASENAME ]; then BASENAME=$(basename "$PND" | cut -d'.' -f1) ; fi + oCWD=$(pwd) # add sanity check @@ -58,26 +63,54 @@ else fi #create mountpoints -#echo " +echo " #will run: # create mountpoints -mkdir -p /mnt/pnd/$BASENAME -mkdir -p $MOUNTPOINT/appdata/$BASENAME -mkdir -p /mnt/utmp/$BASENAME +" +if [ ! -d /mnt/pnd/$BASENAME ]; then +echo "mkdir -p /mnt/pnd/$BASENAME " +fi +if [ ! -d $MOUNTPOINT/appdata/$BASENAME ]; then +echo "mkdir -p $MOUNTPOINT/appdata/$BASENAME " +fi +if [ ! -d /mnt/utmp/$BASENAME ]; then +echo "mkdir -p /mnt/utmp/$BASENAME " +fi #mount -$mntline #mount the pnd/folder -mount -t unionfs -o exec,dirs\=$MOUNTPOINT/appdata/$BASENAME=rw:/mnt/pnd/$BASENAME=ro unionfs /mnt/utmp/$BASENAME #union mount - -#start app -cd /mnt/utmp/$BASENAME -$EXENAME $ARGUMENTS -cd $oCWD -#app exited +if [ ! $UNION ] ; then + mount | grep "on /mnt/utmp/$BASENAME type" > /dev/null + if [ ! $? -eq 0 ]; then + echo " + $mntline #mount the pnd/folder + #mount -t unionfs -o exec,dirs\=$MOUNTPOINT/appdata/$BASENAME=rw:/mnt/pnd/$BASENAME=ro unionfs /mnt/utmp/$BASENAME #union mount + #aufs, one of those should work, bit unsure. + mount -t aufs -o exec,dirs\=$MOUNTPOINT/appdata/$BASENAME=rw:/mnt/pnd/$BASENAME=ro none /mnt/utmp/$BASENAME #aufs? + #mount -t aufs -o exec,dirs\=$MOUNTPOINT/appdata/$BASENAME=rw:/mnt/pnd/$BASENAME=ro aufs /mnt/utmp/$BASENAME #aufs? + " + else + echo "doh!" + fi + echo " + #start app + cd /mnt/utmp/$BASENAME + $EXENAME $ARGUMENTS + cd $oCWD + #app exited + " +else +echo " + $mntline + cd /mnt/pnd/$BASENAME + $EXENAME $ARGUMENTS + cd $oCWD +" +fi +echo " #clean up umount /mnt/utmp/$BASENAME umount /mnt/pnd/$BASENAME rmdir /mnt/pnd/$BASENAME rmdir /mnt/utmp/$BASENAME -# \ No newline at end of file +" -- 2.39.5