summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/aqpkg/ipkg.cpp82
-rw-r--r--noncore/settings/aqpkg/ipkg.h1
2 files changed, 81 insertions, 2 deletions
diff --git a/noncore/settings/aqpkg/ipkg.cpp b/noncore/settings/aqpkg/ipkg.cpp
index c762633..452eca3 100644
--- a/noncore/settings/aqpkg/ipkg.cpp
+++ b/noncore/settings/aqpkg/ipkg.cpp
@@ -64,10 +64,14 @@ bool Ipkg :: runIpkg( )
64 cmd += " ; "; 64 cmd += " ; ";
65 } 65 }
66 cmd += "ipkg -force-defaults"; 66 cmd += "ipkg -force-defaults";
67 if ( option != "update" && option != "download" ) 67
68 { 68 // only set the destination for an install operation
69 if ( option == "install" )
69 cmd += " -dest "+ destination; 70 cmd += " -dest "+ destination;
70 71
72
73 if ( option != "update" && option != "download" )
74 {
71 if ( flags & FORCE_DEPENDS ) 75 if ( flags & FORCE_DEPENDS )
72 cmd += " -force-depends"; 76 cmd += " -force-depends";
73 if ( flags & FORCE_REINSTALL ) 77 if ( flags & FORCE_REINSTALL )
@@ -156,13 +160,87 @@ bool Ipkg :: runIpkg( )
156 } 160 }
157 161
158 delete dependantPackages; 162 delete dependantPackages;
163
164 // Finally, if we are removing a package, remove its entry from the <destdir>/usr/lib/ipkg/status file
165 // to workaround an ipkg bug which stops reinstall to a different location
166 if ( option == "remove" )
167 removeStatusEntry();
159 168
169
160// emit outputText( QString( "Finished - status=" ) + (ret ? "success" : "failure") ); 170// emit outputText( QString( "Finished - status=" ) + (ret ? "success" : "failure") );
161 emit outputText( "Finished" ); 171 emit outputText( "Finished" );
162 emit outputText( "" ); 172 emit outputText( "" );
163 return ret; 173 return ret;
164} 174}
165 175
176void Ipkg :: removeStatusEntry()
177{
178 QString statusFile = destDir;
179 if ( statusFile.right( 1 ) != "/" )
180 statusFile += "/";
181 statusFile += "usr/lib/ipkg/status";
182 QString outStatusFile = statusFile + ".tmp";
183
184 emit outputText( "" );
185 emit outputText( "Removing status entry..." );
186 emit outputText( QString( "status file - " )+ statusFile );
187 emit outputText( QString( "package - " )+ package );
188
189 ifstream in( statusFile );
190 ofstream out( outStatusFile );
191 if ( !in.is_open() )
192 {
193 emit outputText( QString( "Couldn't open status file - " )+ statusFile );
194 return;
195 }
196
197 if ( !out.is_open() )
198 {
199 emit outputText( QString( "Couldn't create tempory status file - " )+ outStatusFile );
200 return;
201 }
202
203 char line[1001];
204 char k[21];
205 char v[1001];
206 QString key;
207 QString value;
208 do
209 {
210 in.getline( line, 1000 );
211 if ( in.eof() )
212 continue;
213
214 k[0] = '\0';
215 v[0] = '\0';
216
217 sscanf( line, "%[^:]: %[^\n]", k, v );
218 key = k;
219 value = v;
220 key = key.stripWhiteSpace();
221 value = value.stripWhiteSpace();
222 if ( key == "Package" && value == package )
223 {
224 // Ignore all lines up to next empty
225 do
226 {
227 in.getline( line, 1000 );
228 if ( in.eof() || QString( line ).stripWhiteSpace() == "" )
229 continue;
230 } while ( !in.eof() && QString( line ).stripWhiteSpace() != "" );
231 }
232
233 out << line << endl;
234 } while ( !in.eof() );
235
236 in.close();
237 out.close();
238
239 // Remove old status file and put tmp stats file in its place
240 remove( statusFile );
241 rename( outStatusFile, statusFile );
242}
243
166 244
167int Ipkg :: executeIpkgCommand( QString &cmd, const QString option ) 245int Ipkg :: executeIpkgCommand( QString &cmd, const QString option )
168{ 246{
diff --git a/noncore/settings/aqpkg/ipkg.h b/noncore/settings/aqpkg/ipkg.h
index 63588c4..55e9ff4 100644
--- a/noncore/settings/aqpkg/ipkg.h
+++ b/noncore/settings/aqpkg/ipkg.h
@@ -63,6 +63,7 @@ private:
63 QList<QString> *dependantPackages; 63 QList<QString> *dependantPackages;
64 64
65 int executeIpkgCommand( QString &cmd, const QString option ); 65 int executeIpkgCommand( QString &cmd, const QString option );
66 void removeStatusEntry();
66 void linkPackage( const QString &packFileName, const QString &dest, const QString &destDir ); 67 void linkPackage( const QString &packFileName, const QString &dest, const QString &destDir );
67 QStringList* getList( const QString &packageFilename, const QString &destDir ); 68 QStringList* getList( const QString &packageFilename, const QString &destDir );
68 void processFileList( const QStringList *fileList, const QString &destDir ); 69 void processFileList( const QStringList *fileList, const QString &destDir );