summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/aqpkg/aqpkg.pro2
-rw-r--r--noncore/settings/aqpkg/ipkg.cpp103
-rw-r--r--noncore/settings/aqpkg/utils.cpp9
3 files changed, 52 insertions, 62 deletions
diff --git a/noncore/settings/aqpkg/aqpkg.pro b/noncore/settings/aqpkg/aqpkg.pro
index 882cfd4..a24f036 100644
--- a/noncore/settings/aqpkg/aqpkg.pro
+++ b/noncore/settings/aqpkg/aqpkg.pro
@@ -1,40 +1,40 @@
1 CONFIG = qt warn_on release quick-app 1 CONFIG = qt warn_on release quick-app
2 HEADERS = global.h \ 2 HEADERS = global.h \
3 mainwin.h \ 3 mainwin.h \
4 datamgr.h \ 4 datamgr.h \
5 settingsimpl.h \ 5 settingsimpl.h \
6 ipkg.h \ 6 ipkg.h \
7 packagewin.h \ 7 packagewin.h \
8 package.h \ 8 package.h \
9 installdlgimpl.h \ 9 installdlgimpl.h \
10 instoptionsimpl.h \ 10 instoptionsimpl.h \
11 destination.h \ 11 destination.h \
12 utils.h \ 12 utils.h \
13 server.h \ 13 server.h \
14 letterpushbutton.h \ 14 letterpushbutton.h \
15 inputdlg.h \ 15 inputdlg.h \
16 categoryfilterimpl.h 16 categoryfilterimpl.h
17 SOURCES = mainwin.cpp \ 17 SOURCES = mainwin.cpp \
18 datamgr.cpp \ 18 datamgr.cpp \
19 mem.cpp \ 19 mem.cpp \
20 settingsimpl.cpp \ 20 settingsimpl.cpp \
21 ipkg.cpp \ 21 ipkg.cpp \
22 main.cpp \ 22 main.cpp \
23 packagewin.cpp \ 23 packagewin.cpp \
24 package.cpp \ 24 package.cpp \
25 installdlgimpl.cpp \ 25 installdlgimpl.cpp \
26 instoptionsimpl.cpp \ 26 instoptionsimpl.cpp \
27 destination.cpp \ 27 destination.cpp \
28 utils.cpp \ 28 utils.cpp \
29 server.cpp \ 29 server.cpp \
30 letterpushbutton.cpp \ 30 letterpushbutton.cpp \
31 inputdlg.cpp \ 31 inputdlg.cpp \
32 version.cpp \ 32 version.cpp \
33 categoryfilterimpl.cpp 33 categoryfilterimpl.cpp
34 TARGET = aqpkg 34 TARGET = aqpkg
35INCLUDEPATH += $(OPIEDIR)/include 35INCLUDEPATH += $(OPIEDIR)/include
36DEPENDPATH += $(OPIEDIR)/include 36DEPENDPATH += $(OPIEDIR)/include
37LIBS += -lqpe -lopie -lstdc++ 37LIBS += -lqpe -lopie
38 38
39include ( $(OPIEDIR)/include.pro ) 39include ( $(OPIEDIR)/include.pro )
40 40
diff --git a/noncore/settings/aqpkg/ipkg.cpp b/noncore/settings/aqpkg/ipkg.cpp
index 43eaaae..2a9c576 100644
--- a/noncore/settings/aqpkg/ipkg.cpp
+++ b/noncore/settings/aqpkg/ipkg.cpp
@@ -1,91 +1,84 @@
1/* 1/*
2                This file is part of the OPIE Project 2                This file is part of the OPIE Project
3 3
4 =. Copyright (c) 2002 Andy Qua <andy.qua@blueyonder.co.uk> 4 =. Copyright (c) 2002 Andy Qua <andy.qua@blueyonder.co.uk>
5             .=l. Dan Williams <drw@handhelds.org> 5             .=l. Dan Williams <drw@handhelds.org>
6           .>+-= 6           .>+-=
7 _;:,     .>    :=|. This file is free software; you can 7 _;:,     .>    :=|. This file is free software; you can
8.> <`_,   >  .   <= redistribute it and/or modify it under 8.> <`_,   >  .   <= redistribute it and/or modify it under
9:`=1 )Y*s>-.--   : the terms of the GNU General Public 9:`=1 )Y*s>-.--   : the terms of the GNU General Public
10.="- .-=="i,     .._ License as published by the Free Software 10.="- .-=="i,     .._ License as published by the Free Software
11 - .   .-<_>     .<> Foundation; either version 2 of the License, 11 - .   .-<_>     .<> Foundation; either version 2 of the License,
12     ._= =}       : or (at your option) any later version. 12     ._= =}       : or (at your option) any later version.
13    .%`+i>       _;_. 13    .%`+i>       _;_.
14    .i_,=:_.      -<s. This file is distributed in the hope that 14    .i_,=:_.      -<s. This file is distributed in the hope that
15     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 15     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
16    : ..    .:,     . . . without even the implied warranty of 16    : ..    .:,     . . . without even the implied warranty of
17    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 17    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
18  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU General 18  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU General
19..}^=.=       =       ; Public License for more details. 19..}^=.=       =       ; Public License for more details.
20++=   -.     .`     .: 20++=   -.     .`     .:
21 :     =  ...= . :.=- You should have received a copy of the GNU 21 :     =  ...= . :.=- You should have received a copy of the GNU
22 -.   .:....=;==+<; General Public License along with this file; 22 -.   .:....=;==+<; General Public License along with this file;
23  -_. . .   )=.  = see the file COPYING. If not, write to the 23  -_. . .   )=.  = see the file COPYING. If not, write to the
24    --        :-=` Free Software Foundation, Inc., 24    --        :-=` Free Software Foundation, Inc.,
25 59 Temple Place - Suite 330, 25 59 Temple Place - Suite 330,
26 Boston, MA 02111-1307, USA. 26 Boston, MA 02111-1307, USA.
27 27
28*/ 28*/
29 29
30#include <fstream>
31#include <iostream>
32#include <vector>
33using namespace std;
34
35#include <stdio.h>
36#include <unistd.h>
37
38#ifdef QWS 30#ifdef QWS
39#include <qpe/qpeapplication.h> 31#include <qpe/qpeapplication.h>
40#else 32#else
41#include <qapplication.h> 33#include <qapplication.h>
42#endif 34#endif
43#include <qdir.h> 35#include <qdir.h>
36#include <qfile.h>
44#include <qtextstream.h> 37#include <qtextstream.h>
45 38
46#include <opie/oprocess.h> 39#include <opie/oprocess.h>
47 40
48#include "utils.h" 41#include "utils.h"
49#include "ipkg.h" 42#include "ipkg.h"
50#include "global.h" 43#include "global.h"
51 44
52Ipkg :: Ipkg() 45Ipkg :: Ipkg()
53{ 46{
54 proc = 0; 47 proc = 0;
55} 48}
56 49
57Ipkg :: ~Ipkg() 50Ipkg :: ~Ipkg()
58{ 51{
59} 52}
60 53
61// Option is what we are going to do - install, upgrade, download, reinstall 54// Option is what we are going to do - install, upgrade, download, reinstall
62// package is the package name to install - either a fully qualified path and ipk 55// package is the package name to install - either a fully qualified path and ipk
63// file (if stored locally) or just the name of the package (for a network package) 56// file (if stored locally) or just the name of the package (for a network package)
64// packageName is the package name - (for a network package this will be the same as 57// packageName is the package name - (for a network package this will be the same as
65// package parameter) 58// package parameter)
66// dest is the destination alias (from ipk.conf) 59// dest is the destination alias (from ipk.conf)
67// destDir is the dir that the destination alias points to (used to link to root) 60// destDir is the dir that the destination alias points to (used to link to root)
68// flags is the ipkg options flags 61// flags is the ipkg options flags
69// dir is the directory to run ipkg in (defaults to "") 62// dir is the directory to run ipkg in (defaults to "")
70void Ipkg :: runIpkg() 63void Ipkg :: runIpkg()
71{ 64{
72 error = false; 65 error = false;
73 QStringList commands; 66 QStringList commands;
74 67
75 QDir::setCurrent( "/tmp" ); 68 QDir::setCurrent( "/tmp" );
76 69
77 if ( runtimeDir != "" ) 70 if ( runtimeDir != "" )
78 { 71 {
79 commands << "cd "; 72 commands << "cd ";
80 commands << runtimeDir; 73 commands << runtimeDir;
81 commands << ";"; 74 commands << ";";
82 } 75 }
83 commands << "ipkg" << "-V" << QString::number( infoLevel ) << "-force-defaults"; 76 commands << "ipkg" << "-V" << QString::number( infoLevel ) << "-force-defaults";
84 77
85 // only set the destination for an install operation 78 // only set the destination for an install operation
86 if ( option == "install" ) 79 if ( option == "install" )
87 commands << "-dest" << destination; 80 commands << "-dest" << destination;
88 81
89 82
90 if ( option != "update" && option != "download" ) 83 if ( option != "update" && option != "download" )
91 { 84 {
@@ -158,174 +151,172 @@ void Ipkg :: createSymLinks()
158 { 151 {
159 // If we are not removing packages and make links option is selected 152 // If we are not removing packages and make links option is selected
160 // create the links 153 // create the links
161 createLinks = true; 154 createLinks = true;
162 if ( flags & MAKE_LINKS ) 155 if ( flags & MAKE_LINKS )
163 { 156 {
164 emit outputText( " " ); 157 emit outputText( " " );
165 emit outputText( tr( "Creating symbolic links for %1." ).arg( package) ); 158 emit outputText( tr( "Creating symbolic links for %1." ).arg( package) );
166 159
167 linkPackage( Utils::getPackageNameFromIpkFilename( package ), destination, destDir ); 160 linkPackage( Utils::getPackageNameFromIpkFilename( package ), destination, destDir );
168 161
169 // link dependant packages that were installed with this release 162 // link dependant packages that were installed with this release
170 QString *pkg; 163 QString *pkg;
171 for ( pkg = dependantPackages->first(); pkg != 0; pkg = dependantPackages->next() ) 164 for ( pkg = dependantPackages->first(); pkg != 0; pkg = dependantPackages->next() )
172 { 165 {
173 if ( *pkg == package ) 166 if ( *pkg == package )
174 continue; 167 continue;
175 emit outputText( " " ); 168 emit outputText( " " );
176 emit outputText( tr( "Creating symbolic links for %1" ).arg( *pkg ) ); 169 emit outputText( tr( "Creating symbolic links for %1" ).arg( *pkg ) );
177 linkPackage( Utils::getPackageNameFromIpkFilename( *pkg ), destination, destDir ); 170 linkPackage( Utils::getPackageNameFromIpkFilename( *pkg ), destination, destDir );
178 } 171 }
179 } 172 }
180 } 173 }
181 174
182 delete dependantPackages; 175 delete dependantPackages;
183 176
184 emit outputText( tr("Finished") ); 177 emit outputText( tr("Finished") );
185 emit outputText( "" ); 178 emit outputText( "" );
186} 179}
187 180
188void Ipkg :: removeStatusEntry() 181void Ipkg :: removeStatusEntry()
189{ 182{
190 QString statusFile = destDir; 183 QString statusFile = destDir;
191 if ( statusFile.right( 1 ) != "/" ) 184 if ( statusFile.right( 1 ) != "/" )
192 statusFile.append( "/" ); 185 statusFile.append( "/" );
193 statusFile.append( "usr/lib/ipkg/status" ); 186 statusFile.append( "usr/lib/ipkg/status" );
194 QString outStatusFile = statusFile; 187 QString outStatusFile = statusFile;
195 outStatusFile.append( ".tmp" ); 188 outStatusFile.append( ".tmp" );
196 189
197 emit outputText( "" ); 190 emit outputText( "" );
198 emit outputText( tr("Removing status entry...") ); 191 emit outputText( tr("Removing status entry...") );
199 QString tempstr = tr("status file - "); 192 QString tempstr = tr("status file - ");
200 tempstr.append( statusFile ); 193 tempstr.append( statusFile );
201 emit outputText( tempstr ); 194 emit outputText( tempstr );
202 tempstr = tr("package - "); 195 tempstr = tr("package - ");
203 tempstr.append( package ); 196 tempstr.append( package );
204 emit outputText( tempstr ); 197 emit outputText( tempstr );
205 198
206 ifstream in( statusFile ); 199 QFile readFile( statusFile );
207 ofstream out( outStatusFile ); 200 QFile writeFile( outStatusFile );
208 if ( !in.is_open() ) 201
202 if ( !readFile.open( IO_ReadOnly ) )
209 { 203 {
210 tempstr = tr("Couldn't open status file - "); 204 tempstr = tr("Couldn't open status file - ");
211 tempstr.append( statusFile ); 205 tempstr.append( statusFile );
212 emit outputText( tempstr ); 206 emit outputText( tempstr );
213 return; 207 return;
214 } 208 }
215 209
216 if ( !out.is_open() ) 210 if ( !writeFile.open( IO_WriteOnly ) )
217 { 211 {
218 tempstr = tr("Couldn't create tempory status file - "); 212 tempstr = tr("Couldn't create tempory status file - ");
219 tempstr.append( outStatusFile ); 213 tempstr.append( outStatusFile );
220 emit outputText( tempstr ); 214 emit outputText( tempstr );
221 return; 215 return;
222 } 216 }
223 217
224 char line[1001]; 218 int i = 0;
219
220 QTextStream readStream( &readFile );
221 QTextStream writeStream( &writeFile );
222 QString line;
223
225 char k[21]; 224 char k[21];
226 char v[1001]; 225 char v[1001];
227 QString key; 226 QString key;
228 QString value; 227 QString value;
229 vector<QString> lines; 228
230 int i = 0; 229 while ( !readStream.atEnd() )
231 do
232 { 230 {
233 in.getline( line, 1000 ); 231 //read new line
234 if ( in.eof() ) 232 line = readStream.readLine();
235 continue; 233
236 234 if ( line.contains( ":", TRUE ) )
237 k[0] = '\0';
238 v[0] = '\0';
239
240 sscanf( line, "%[^:]: %[^\n]", k, v );
241 key = k;
242 value = v;
243 key = key.stripWhiteSpace();
244 value = value.stripWhiteSpace();
245 if ( key == "Package" && value == package )
246 { 235 {
247 // Ignore all lines up to next empty 236 //grep key and value from line
248 do 237 k[0] = '\0';
249 { 238 v[0] = '\0';
250 in.getline( line, 1000 ); 239 sscanf( line, "%[^:]: %[^\n]", k, v );
251 if ( in.eof() || QString( line ).stripWhiteSpace() == "" ) 240 key = k;
252 continue; 241 value = v;
253 } while ( !in.eof() && QString( line ).stripWhiteSpace() != "" ); 242 key = key.stripWhiteSpace();
243 value = value.stripWhiteSpace();
244 } else {
245 key = "";
246 value = "";
254 } 247 }
255 248
256 lines.push_back( QString( line ) ); 249 if ( key == "Package" && value == package )
257 out << line << endl; 250 {
258 251 //skip lines from the deleted package
259 // Improve UI responsiveness 252 while ( ( !readStream.atEnd() ) && ( line.stripWhiteSpace() != "" ) )
260 i++; 253 {
261 if ( ( i % 50 ) == 0 ) 254 line = readStream.readLine();
262 qApp->processEvents(); 255 }
263 } while ( !in.eof() ); 256 } else {
264 257
265 // Write lines out 258 //write other lines into the tempfile
266 vector<QString>::iterator it; 259 writeStream << line << "\n";
267 for ( it = lines.begin() ; it != lines.end() ; ++it )
268 {
269 out << (const char *)(*it) << endl;
270 260
271 // Improve UI responsiveness 261 // Improve UI responsiveness
272 i++; 262 i++;
273 if ( ( i % 50 ) == 0 ) 263 if ( ( i % 50 ) == 0 )
274 qApp->processEvents(); 264 qApp->processEvents();
265 }
275 } 266 }
276 267
277 in.close(); 268 readFile.close();
278 out.close(); 269 writeFile.close();
279 270
280 // Remove old status file and put tmp stats file in its place 271 // Remove old status file and put tmp stats file in its place
281 remove( statusFile ); 272 remove( statusFile );
282 rename( outStatusFile, statusFile ); 273 rename( outStatusFile, statusFile );
283} 274 }
284 275
285int Ipkg :: executeIpkgCommand( QStringList &cmd, const QString /*option*/ ) 276int Ipkg :: executeIpkgCommand( QStringList &cmd, const QString /*option*/ )
286{ 277{
287 // If one is already running - should never be but just to be safe 278 // If one is already running - should never be but just to be safe
288 if ( proc ) 279 if ( proc )
289 { 280 {
290 delete proc; 281 delete proc;
291 proc = 0; 282 proc = 0;
292 } 283 }
293 284
294 // OK we're gonna use OProcess to run this thing 285 // OK we're gonna use OProcess to run this thing
295 proc = new OProcess(); 286 proc = new OProcess();
296 aborted = false; 287 aborted = false;
297 288
298 289
299 // Connect up our slots 290 // Connect up our slots
300 connect(proc, SIGNAL(processExited(OProcess *)), 291 connect(proc, SIGNAL(processExited(OProcess *)),
301 this, SLOT( processFinished())); 292 this, SLOT( processFinished()));
302 293
303 connect(proc, SIGNAL(receivedStdout(OProcess *, char *, int)), 294 connect(proc, SIGNAL(receivedStdout(OProcess *, char *, int)),
304 this, SLOT(commandStdout(OProcess *, char *, int))); 295 this, SLOT(commandStdout(OProcess *, char *, int)));
305 296
306 connect(proc, SIGNAL(receivedStderr(OProcess *, char *, int)), 297 connect(proc, SIGNAL(receivedStderr(OProcess *, char *, int)),
307 this, SLOT(commandStderr(OProcess *, char *, int))); 298 this, SLOT(commandStderr(OProcess *, char *, int)));
308 299
309 for ( QStringList::Iterator it = cmd.begin(); it != cmd.end(); ++it ) 300 for ( QStringList::Iterator it = cmd.begin(); it != cmd.end(); ++it )
310 { 301 {
311 *proc << (*it).latin1(); 302 *proc << (*it).latin1();
312 } 303 }
313 304
314 // Start the process going 305 // Start the process going
315 finished = false; 306 finished = false;
316 if(!proc->start(OProcess::NotifyOnExit, OProcess::All)) 307 if(!proc->start(OProcess::NotifyOnExit, OProcess::All))
317 { 308 {
318 emit outputText( tr("Couldn't start ipkg process" ) ); 309 emit outputText( tr("Couldn't start ipkg process" ) );
319 } 310 }
320} 311}
321 312
322void Ipkg::commandStdout(OProcess*, char *buffer, int buflen) 313void Ipkg::commandStdout(OProcess*, char *buffer, int buflen)
323{ 314{
324 QString lineStr = buffer; 315 QString lineStr = buffer;
325 if ( lineStr[buflen-1] == '\n' ) 316 if ( lineStr[buflen-1] == '\n' )
326 buflen --; 317 buflen --;
327 lineStr = lineStr.left( buflen ); 318 lineStr = lineStr.left( buflen );
328 emit outputText( lineStr ); 319 emit outputText( lineStr );
329 320
330 // check if we are installing dependant packages 321 // check if we are installing dependant packages
331 if ( option == "install" || option == "reinstall" ) 322 if ( option == "install" || option == "reinstall" )
diff --git a/noncore/settings/aqpkg/utils.cpp b/noncore/settings/aqpkg/utils.cpp
index 00607dd..be02b3a 100644
--- a/noncore/settings/aqpkg/utils.cpp
+++ b/noncore/settings/aqpkg/utils.cpp
@@ -1,105 +1,104 @@
1/* 1/*
2                This file is part of the OPIE Project 2                This file is part of the OPIE Project
3 3
4 =. Copyright (c) 2002 Andy Qua <andy.qua@blueyonder.co.uk> 4 =. Copyright (c) 2002 Andy Qua <andy.qua@blueyonder.co.uk>
5             .=l. Dan Williams <drw@handhelds.org> 5             .=l. Dan Williams <drw@handhelds.org>
6           .>+-= 6           .>+-=
7 _;:,     .>    :=|. This file is free software; you can 7 _;:,     .>    :=|. This file is free software; you can
8.> <`_,   >  .   <= redistribute it and/or modify it under 8.> <`_,   >  .   <= redistribute it and/or modify it under
9:`=1 )Y*s>-.--   : the terms of the GNU General Public 9:`=1 )Y*s>-.--   : the terms of the GNU General Public
10.="- .-=="i,     .._ License as published by the Free Software 10.="- .-=="i,     .._ License as published by the Free Software
11 - .   .-<_>     .<> Foundation; either version 2 of the License, 11 - .   .-<_>     .<> Foundation; either version 2 of the License,
12     ._= =}       : or (at your option) any later version. 12     ._= =}       : or (at your option) any later version.
13    .%`+i>       _;_. 13    .%`+i>       _;_.
14    .i_,=:_.      -<s. This file is distributed in the hope that 14    .i_,=:_.      -<s. This file is distributed in the hope that
15     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 15     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
16    : ..    .:,     . . . without even the implied warranty of 16    : ..    .:,     . . . without even the implied warranty of
17    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 17    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
18  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU General 18  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU General
19..}^=.=       =       ; Public License for more details. 19..}^=.=       =       ; Public License for more details.
20++=   -.     .`     .: 20++=   -.     .`     .:
21 :     =  ...= . :.=- You should have received a copy of the GNU 21 :     =  ...= . :.=- You should have received a copy of the GNU
22 -.   .:....=;==+<; General Public License along with this file; 22 -.   .:....=;==+<; General Public License along with this file;
23  -_. . .   )=.  = see the file COPYING. If not, write to the 23  -_. . .   )=.  = see the file COPYING. If not, write to the
24    --        :-=` Free Software Foundation, Inc., 24    --        :-=` Free Software Foundation, Inc.,
25 59 Temple Place - Suite 330, 25 59 Temple Place - Suite 330,
26 Boston, MA 02111-1307, USA. 26 Boston, MA 02111-1307, USA.
27 27
28*/ 28*/
29 29
30#include <stdio.h>
31#include <sys/vfs.h> 30#include <sys/vfs.h>
32 31
33#include "utils.h" 32#include "utils.h"
34#include "global.h" 33#include "global.h"
35 34
36Utils :: Utils() 35Utils :: Utils()
37{ 36{
38} 37}
39 38
40Utils :: ~Utils() 39Utils :: ~Utils()
41{ 40{
42} 41}
43 42
44QString Utils :: getPathfromIpkFilename( const QString &file ) 43QString Utils :: getPathfromIpkFilename( const QString &file )
45{ 44{
46 int p = file.findRev( "/" ); 45 int p = file.findRev( "/" );
47 QString path = ""; 46 QString path = "";
48 if ( p != -1 ) 47 if ( p != -1 )
49 path = file.left( p ); 48 path = file.left( p );
50 49
51 return path; 50 return path;
52 51
53} 52}
54 53
55QString Utils :: getFilenameFromIpkFilename( const QString &file ) 54QString Utils :: getFilenameFromIpkFilename( const QString &file )
56{ 55{
57 int p = file.findRev( "/" ); 56 int p = file.findRev( "/" );
58 QString name = file; 57 QString name = file;
59 if ( p != -1 ) 58 if ( p != -1 )
60 name = name.mid( p + 1 ); 59 name = name.mid( p + 1 );
61 60
62 61
63 return name; 62 return name;
64} 63}
65 64
66QString Utils :: getPackageNameFromIpkFilename( const QString &file ) 65QString Utils :: getPackageNameFromIpkFilename( const QString &file )
67{ 66{
68 int p = file.findRev( "/" ); 67 int p = file.findRev( "/" );
69 QString name = file; 68 QString name = file;
70 if ( p != -1 ) 69 if ( p != -1 )
71 name = name.mid( p + 1 ); 70 name = name.mid( p + 1 );
72 p = name.find( "_" ); 71 p = name.find( "_" );
73 QString packageName = name.mid( 0, p ); 72 QString packageName = name.mid( 0, p );
74 return packageName; 73 return packageName;
75} 74}
76 75
77QString Utils :: getPackageVersionFromIpkFilename( const QString &file ) 76QString Utils :: getPackageVersionFromIpkFilename( const QString &file )
78{ 77{
79 int p = file.findRev( "/" ); 78 int p = file.findRev( "/" );
80 QString name = file; 79 QString name = file;
81 if ( p != -1 ) 80 if ( p != -1 )
82 name = name.mid( p + 1 ); 81 name = name.mid( p + 1 );
83 p = name.find( "_" ) + 1; 82 p = name.find( "_" ) + 1;
84 int p2 = name.find( "_", p ); 83 int p2 = name.find( "_", p );
85 QString version = name.mid( p, p2 - p ); 84 QString version = name.mid( p, p2 - p );
86 return version; 85 return version;
87} 86}
88 87
89 88
90bool Utils :: getStorageSpace( const char *path, long *blockSize, long *totalBlocks, long *availBlocks ) 89bool Utils :: getStorageSpace( const char *path, long *blockSize, long *totalBlocks, long *availBlocks )
91{ 90{
92 bool ret = false; 91 bool ret = false;
93 92
94 struct statfs fs; 93 struct statfs fs;
95 if ( !statfs( path, &fs ) ) 94 if ( !statfs( path, &fs ) )
96 { 95 {
97 *blockSize = fs.f_bsize; 96 *blockSize = fs.f_bsize;
98 *totalBlocks = fs.f_blocks; 97 *totalBlocks = fs.f_blocks;
99 *availBlocks = fs.f_bavail; 98 *availBlocks = fs.f_bavail;
100 ret = true; 99 ret = true;
101 } 100 }
102 101
103 return ret; 102 return ret;
104} 103}
105 104