author | brad <brad> | 2004-03-29 16:57:42 (UTC) |
---|---|---|
committer | brad <brad> | 2004-03-29 16:57:42 (UTC) |
commit | e15bbcc647d8e236c5cc1539f8fcd8a4f6809c1e (patch) (side-by-side diff) | |
tree | f8501dfa36a106437af7d09fb21e385d1d131a50 | |
parent | b34d33b14b77331c0de16d3c80f929512003f06c (diff) | |
download | opie-e15bbcc647d8e236c5cc1539f8fcd8a4f6809c1e.zip opie-e15bbcc647d8e236c5cc1539f8fcd8a4f6809c1e.tar.gz opie-e15bbcc647d8e236c5cc1539f8fcd8a4f6809c1e.tar.bz2 |
Add workaround for the new format of ipkg written list files on external media.
Works with old and new versions of ipkg now and does not touch anything set up by
other package management programs
-rw-r--r-- | core/symlinker/main.cpp | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/core/symlinker/main.cpp b/core/symlinker/main.cpp index 73d5166..6a04980 100644 --- a/core/symlinker/main.cpp +++ b/core/symlinker/main.cpp @@ -8,17 +8,19 @@ #include <stdlib.h> #include <unistd.h> //symlink() #include <sys/stat.h> // mkdir() #include <sys/vfs.h> #include <mntent.h> +#include <errno.h> static const char *listDir = "/usr/lib/ipkg/externinfo/"; static void createSymlinks( const QString &location, const QString &package ) { + QFile inFile( location + "/usr/lib/ipkg/info/" + package + ".list" ); mkdir( "/usr/lib/ipkg", 0777 ); mkdir( listDir, 0777 ); QFile outFile( listDir + package + ".list"); @@ -31,29 +33,45 @@ static void createSymlinks( const QString &location, const QString &package ) QTextStream out(&outFile); QString s; while ( !in.eof() ) { // until end of file... s = in.readLine(); // line of text excluding '\n' //qDebug( "Read: %s", s.ascii() ); + if (s.find(location,0,true) >= 0){ +// qDebug( "Found!" ); + s = s.replace(location,""); + } +// qDebug( "Read after: %s", s.ascii() ); + // for s, do link/mkdir. if ( s.right(1) == "/" ) { //qDebug("do mkdir for %s", s.ascii()); mkdir( s.ascii(), 0777 ); //possible optimization: symlink directories //that don't exist already. -- Risky. } else { //qDebug("do symlink for %s", s.ascii()); QFileInfo ffi( s ); //Don't try to symlink if a regular file exists already if ( !ffi.exists() || ffi.isSymLink() ) { - symlink( (location+s).ascii(), s.ascii() ); + if (symlink( (location+s).ascii(), s.ascii() ) != 0){ + if (errno == ENOENT){ +// perror("Symlink Failed! "); + QString e=s.ascii(); + e = e.replace(ffi.fileName(),""); +// qDebug("DirName : %s",e.ascii() ); + system ( QString("mkdir -p ")+e.ascii() ); + if (symlink( (location+s).ascii(), s.ascii() ) != 0) + qDebug ("Big problem creating symlink and directory"); + } + } // qDebug ( "Created %s" ,s.ascii() ); out << s << "\n"; - } //else { - // qDebug( "%s exists already, not symlinked", s.ascii() ); -// } + } else { + qDebug( "%s exists already, not symlinked", s.ascii() ); + } } } inFile.close(); outFile.close(); } } @@ -70,18 +88,19 @@ static void removeSymlinks( const QString &package ) QString s; while ( !in.eof() ) { // until end of file... s = in.readLine(); // line of text excluding '\n' //qDebug("remove symlink %s", s.ascii()); QFileInfo ffi( s ); //Confirm that it's still a symlink. - if ( ffi.isSymLink() ) + if ( ffi.isSymLink() ){ unlink( s.ascii() ); -// qDebug ( "Removed %s", s.ascii() ); +// qDebug ( "Removed %s", s.ascii() );} // else // qDebug( "Not removed %s", s.ascii() ); } + } inFile.close(); inFile.remove(); } } |