summaryrefslogtreecommitdiff
authorbrad <brad>2004-03-29 16:57:42 (UTC)
committer brad <brad>2004-03-29 16:57:42 (UTC)
commite15bbcc647d8e236c5cc1539f8fcd8a4f6809c1e (patch) (unidiff)
treef8501dfa36a106437af7d09fb21e385d1d131a50
parentb34d33b14b77331c0de16d3c80f929512003f06c (diff)
downloadopie-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
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/symlinker/main.cpp47
1 files changed, 33 insertions, 14 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
@@ -13,2 +13,3 @@
13#include <mntent.h> 13#include <mntent.h>
14#include <errno.h>
14 15
@@ -18,2 +19,3 @@ static void createSymlinks( const QString &location, const QString &package )
18{ 19{
20
19 QFile inFile( location + "/usr/lib/ipkg/info/" + package + ".list" ); 21 QFile inFile( location + "/usr/lib/ipkg/info/" + package + ".list" );
@@ -24,3 +26,3 @@ static void createSymlinks( const QString &location, const QString &package )
24 26
25 //qDebug( "createSymlinks %s -> %s", inFile.name().ascii(), outFile.name().ascii() ); 27// qDebug( "createSymlinks %s -> %s", inFile.name().ascii(), outFile.name().ascii() );
26 28
@@ -35,6 +37,12 @@ static void createSymlinks( const QString &location, const QString &package )
35 s = in.readLine(); // line of text excluding '\n' 37 s = in.readLine(); // line of text excluding '\n'
36 //qDebug( "Read: %s", s.ascii() ); 38 // qDebug( "Read: %s", s.ascii() );
39 if (s.find(location,0,true) >= 0){
40 // qDebug( "Found!" );
41 s = s.replace(location,"");
42 }
43 // qDebug( "Read after: %s", s.ascii() );
44
37 // for s, do link/mkdir. 45 // for s, do link/mkdir.
38 if ( s.right(1) == "/" ) { 46 if ( s.right(1) == "/" ) {
39 //qDebug("do mkdir for %s", s.ascii()); 47 // qDebug("do mkdir for %s", s.ascii());
40 mkdir( s.ascii(), 0777 ); 48 mkdir( s.ascii(), 0777 );
@@ -43,3 +51,3 @@ static void createSymlinks( const QString &location, const QString &package )
43 } else { 51 } else {
44 //qDebug("do symlink for %s", s.ascii()); 52 // qDebug("do symlink for %s", s.ascii());
45 QFileInfo ffi( s ); 53 QFileInfo ffi( s );
@@ -47,8 +55,18 @@ static void createSymlinks( const QString &location, const QString &package )
47 if ( !ffi.exists() || ffi.isSymLink() ) { 55 if ( !ffi.exists() || ffi.isSymLink() ) {
48 symlink( (location+s).ascii(), s.ascii() ); 56 if (symlink( (location+s).ascii(), s.ascii() ) != 0){
57 if (errno == ENOENT){
58 // perror("Symlink Failed! ");
59 QString e=s.ascii();
60 e = e.replace(ffi.fileName(),"");
61 // qDebug("DirName : %s",e.ascii() );
62 system ( QString("mkdir -p ")+e.ascii() );
63 if (symlink( (location+s).ascii(), s.ascii() ) != 0)
64 qDebug ("Big problem creating symlink and directory");
65 }
66 }
49 // qDebug ( "Created %s" ,s.ascii() ); 67 // qDebug ( "Created %s" ,s.ascii() );
50 out << s << "\n"; 68 out << s << "\n";
51 } //else { 69 } else {
52 // qDebug( "%s exists already, not symlinked", s.ascii() ); 70 qDebug( "%s exists already, not symlinked", s.ascii() );
53 // } 71 }
54 } 72 }
@@ -72,10 +90,11 @@ static void removeSymlinks( const QString &package )
72 s = in.readLine(); // line of text excluding '\n' 90 s = in.readLine(); // line of text excluding '\n'
73 //qDebug("remove symlink %s", s.ascii()); 91 // qDebug("remove symlink %s", s.ascii());
74 QFileInfo ffi( s ); 92 QFileInfo ffi( s );
75 //Confirm that it's still a symlink. 93 //Confirm that it's still a symlink.
76 if ( ffi.isSymLink() ) 94 if ( ffi.isSymLink() ){
77 unlink( s.ascii() ); 95 unlink( s.ascii() );
78 // qDebug ( "Removed %s", s.ascii() ); 96 // qDebug ( "Removed %s", s.ascii() );}
79 // else 97 // else
80 // qDebug( "Not removed %s", s.ascii() ); 98 // qDebug( "Not removed %s", s.ascii() );
99 }
81 } 100 }
@@ -114,3 +133,3 @@ static void updateSymlinks()
114 QDir infoDir( info ); 133 QDir infoDir( info );
115 //qDebug( "looking at %s", info.ascii() ); 134 // qDebug( "looking at %s", info.ascii() );
116 if ( infoDir.isReadable() ) { 135 if ( infoDir.isReadable() ) {
@@ -122,3 +141,3 @@ static void updateSymlinks()
122 if ( knownPackages.contains( fi->fileName() ) ) { 141 if ( knownPackages.contains( fi->fileName() ) ) {
123 //qDebug( "found %s and we've seen it before", fi->fileName().latin1() ); 142 // qDebug( "found %s and we've seen it before", fi->fileName().latin1() );
124 knownPackages.remove( fi->fileName() ); 143 knownPackages.remove( fi->fileName() );