summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/aqpkg/ipkg.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/noncore/settings/aqpkg/ipkg.cpp b/noncore/settings/aqpkg/ipkg.cpp
index f8513e4..6d0edad 100644
--- a/noncore/settings/aqpkg/ipkg.cpp
+++ b/noncore/settings/aqpkg/ipkg.cpp
@@ -84,91 +84,94 @@ bool Ipkg :: runIpkg( )
84 // if destDir is NOT / 84 // if destDir is NOT /
85 if ( flags & MAKE_LINKS ) 85 if ( flags & MAKE_LINKS )
86 { 86 {
87 // If destDir == / turn off make links as package is being insalled 87 // If destDir == / turn off make links as package is being insalled
88 // to root already. 88 // to root already.
89 if ( destDir == "/" ) 89 if ( destDir == "/" )
90 flags ^= MAKE_LINKS; 90 flags ^= MAKE_LINKS;
91 } 91 }
92 92
93 } 93 }
94 94
95#ifdef X86 95#ifdef X86
96 cmd += " -f "; 96 cmd += " -f ";
97 cmd += IPKG_CONF; 97 cmd += IPKG_CONF;
98#endif 98#endif
99 99
100 cmd += " " + option; 100 cmd += " " + option;
101 if ( option != "upgrade" ) 101 if ( option != "upgrade" )
102 cmd += " " + package; 102 cmd += " " + package;
103 cmd += " 2>&1"; 103 cmd += " 2>&1";
104 104
105 qApp->processEvents(); 105 qApp->processEvents();
106 106
107 // If we are removing packages and make links option is selected 107 // If we are removing packages and make links option is selected
108 // create the links 108 // create the links
109 if ( option == "remove" ) 109 if ( option == "remove" )
110 { 110 {
111 createLinks = false; 111 createLinks = false;
112 if ( flags & MAKE_LINKS ) 112 if ( flags & MAKE_LINKS )
113 { 113 {
114 emit outputText( QString( "Removing symbolic links...\n" ) ); 114 emit outputText( QString( "Removing symbolic links...\n" ) );
115 linkPackage( Utils::getPackageNameFromIpkFilename( package ), destination, destDir ); 115 linkPackage( Utils::getPackageNameFromIpkFilename( package ), destination, destDir );
116 emit outputText( QString( " " ) );
116 } 117 }
117 } 118 }
118 119
119 emit outputText( cmd ); 120 emit outputText( cmd );
120 121
121 // Execute command 122 // Execute command
122 dependantPackages = new QList<QString>; 123 dependantPackages = new QList<QString>;
123 dependantPackages->setAutoDelete( true ); 124 dependantPackages->setAutoDelete( true );
124 125
125 ret = executeIpkgCommand( cmd, option ); 126 ret = executeIpkgCommand( cmd, option );
126 127
127 if ( option == "install" ) 128 if ( option == "install" )
128 { 129 {
129 // If we are not removing packages and make links option is selected 130 // If we are not removing packages and make links option is selected
130 // create the links 131 // create the links
131 createLinks = true; 132 createLinks = true;
132 if ( flags & MAKE_LINKS ) 133 if ( flags & MAKE_LINKS )
133 { 134 {
134 emit outputText( " " ); 135 emit outputText( " " );
135 emit outputText( QString( "Creating symbolic links for " )+ package ); 136 emit outputText( QString( "Creating symbolic links for " )+ package );
136 137
137 linkPackage( Utils::getPackageNameFromIpkFilename( package ), destination, destDir ); 138 linkPackage( Utils::getPackageNameFromIpkFilename( package ), destination, destDir );
138 139
139 // link dependant packages that were installed with this release 140 // link dependant packages that were installed with this release
140 QString *pkg; 141 QString *pkg;
141 for ( pkg = dependantPackages->first(); pkg != 0; pkg = dependantPackages->next() ) 142 for ( pkg = dependantPackages->first(); pkg != 0; pkg = dependantPackages->next() )
142 { 143 {
144 if ( *pkg == package )
145 continue;
143 emit outputText( " " ); 146 emit outputText( " " );
144 emit outputText( QString( "Creating symbolic links for " )+ (*pkg) ); 147 emit outputText( QString( "Creating symbolic links for " )+ (*pkg) );
145 linkPackage( Utils::getPackageNameFromIpkFilename( *pkg ), destination, destDir ); 148 linkPackage( Utils::getPackageNameFromIpkFilename( *pkg ), destination, destDir );
146 } 149 }
147 } 150 }
148 } 151 }
149 152
150 delete dependantPackages; 153 delete dependantPackages;
151 154
152 emit outputText( QString( "Finished - status=" ) + (ret ? "success" : "failure") ); 155 emit outputText( QString( "Finished - status=" ) + (ret ? "success" : "failure") );
153 return ret; 156 return ret;
154} 157}
155 158
156 159
157int Ipkg :: executeIpkgCommand( QString &cmd, const QString option ) 160int Ipkg :: executeIpkgCommand( QString &cmd, const QString option )
158{ 161{
159 FILE *fp = NULL; 162 FILE *fp = NULL;
160 char line[130]; 163 char line[130];
161 QString lineStr, lineStrOld; 164 QString lineStr, lineStrOld;
162 int ret = false; 165 int ret = false;
163 166
164 fp = popen( (const char *) cmd, "r"); 167 fp = popen( (const char *) cmd, "r");
165 if ( fp == NULL ) 168 if ( fp == NULL )
166 { 169 {
167 cout << "Couldn't execute " << cmd << "! err = " << fp << endl; 170 cout << "Couldn't execute " << cmd << "! err = " << fp << endl;
168 QString text; 171 QString text;
169 text.sprintf( "Couldn't execute %s! See stdout for error code", (const char *)cmd ); 172 text.sprintf( "Couldn't execute %s! See stdout for error code", (const char *)cmd );
170 emit outputText( text ); 173 emit outputText( text );
171 } 174 }
172 else 175 else
173 { 176 {
174 while ( fgets( line, sizeof line, fp) != NULL ) 177 while ( fgets( line, sizeof line, fp) != NULL )
@@ -255,75 +258,84 @@ QStringList* Ipkg :: getList( const QString &packageFilename, const QString &des
255 emit outputText( QString( "Could not open :" ) + packageFileDir ); 258 emit outputText( QString( "Could not open :" ) + packageFileDir );
256 return (QStringList*)0; 259 return (QStringList*)0;
257 } 260 }
258 } 261 }
259 QStringList *fileList = new QStringList(); 262 QStringList *fileList = new QStringList();
260 QTextStream t( &f ); 263 QTextStream t( &f );
261 while ( !t.eof() ) 264 while ( !t.eof() )
262 *fileList += t.readLine(); 265 *fileList += t.readLine();
263 266
264 f.close(); 267 f.close();
265 return fileList; 268 return fileList;
266} 269}
267 270
268void Ipkg :: processFileList( const QStringList *fileList, const QString &destDir ) 271void Ipkg :: processFileList( const QStringList *fileList, const QString &destDir )
269{ 272{
270 if ( !fileList || fileList->isEmpty() ) 273 if ( !fileList || fileList->isEmpty() )
271 return; 274 return;
272 275
273 QString baseDir = ROOT; 276 QString baseDir = ROOT;
274 277
275 if ( createLinks == true ) 278 if ( createLinks == true )
276 { 279 {
277 for ( uint i=0; i < fileList->count(); i++ ) 280 for ( uint i=0; i < fileList->count(); i++ )
278 { 281 {
279 processLinkDir( (*fileList)[i], baseDir, destDir ); 282 processLinkDir( (*fileList)[i], baseDir, destDir );
280 qApp->processEvents(); 283 qApp->processEvents();
281 } 284 }
282 } 285 }
283 else 286 else
284 { 287 {
285 for ( int i = fileList->count()-1; i >= 0 ; i-- ) 288 for ( int i = fileList->count()-1; i >= 0 ; i-- )
286 { 289 {
287 cout << "i = " << i << ", Dealing with " << (*fileList)[i] << endl;
288 processLinkDir( (*fileList)[i], baseDir, destDir ); 290 processLinkDir( (*fileList)[i], baseDir, destDir );
289 qApp->processEvents(); 291 qApp->processEvents();
290 } 292 }
291 } 293 }
292} 294}
293 295
294void Ipkg :: processLinkDir( const QString &file, const QString &destDir, const QString &baseDir ) 296void Ipkg :: processLinkDir( const QString &file, const QString &destDir, const QString &baseDir )
295{ 297{
298
296 QString sourceFile = baseDir + file; 299 QString sourceFile = baseDir + file;
297 QString linkFile = destDir + file; 300
301 QString linkFile = destDir;
302 if ( file.startsWith( "/" ) && destDir.right( 1 ) == "/" )
303 {
304 linkFile += file.mid( 1 );
305 }
306 else
307 {
308 linkFile += file;
309 }
298 QString text; 310 QString text;
299 if ( createLinks ) 311 if ( createLinks )
300 { 312 {
301 // If this file is a directory (ends with a /) and it doesn't exist, 313 // If this file is a directory (ends with a /) and it doesn't exist,
302 // we need to create it 314 // we need to create it
303 if ( file.right(1) == "/" ) 315 if ( file.right(1) == "/" )
304 { 316 {
305 QFileInfo f( linkFile ); 317 QFileInfo f( linkFile );
306 if ( !f.exists() ) 318 if ( !f.exists() )
307 { 319 {
308 emit outputText( QString( "Creating directory " ) + linkFile ); 320 emit outputText( QString( "Creating directory " ) + linkFile );
309 QDir d; 321 QDir d;
310 d.mkdir( linkFile, true ); 322 d.mkdir( linkFile, true );
311 } 323 }
312 else 324 else
313 emit outputText( QString( "Directory " ) + linkFile + " exists" ); 325 emit outputText( QString( "Directory " ) + linkFile + " exists" );
314 326
315 } 327 }
316 else 328 else
317 { 329 {
318 int rc = symlink( sourceFile, linkFile ); 330 int rc = symlink( sourceFile, linkFile );
319 text = (rc == 0 ? "Linked " : "Failed to link "); 331 text = (rc == 0 ? "Linked " : "Failed to link ");
320 text += sourceFile + " to " + linkFile; 332 text += sourceFile + " to " + linkFile;
321 emit outputText( text ); 333 emit outputText( text );
322 } 334 }
323 } 335 }
324 else 336 else
325 { 337 {
326 QFileInfo f( linkFile ); 338 QFileInfo f( linkFile );
327 if ( f.exists() ) 339 if ( f.exists() )
328 { 340 {
329 if ( f.isFile() ) 341 if ( f.isFile() )