summaryrefslogtreecommitdiff
authordrw <drw>2002-12-20 02:17:55 (UTC)
committer drw <drw>2002-12-20 02:17:55 (UTC)
commit9328bf79f49294e14c1753c9ee17ddd2985c1969 (patch) (unidiff)
treeb0c9fa3e990b45cbfc9fb7fb33da73b9f6477df9
parent3e556ed5f8c8b1236b9c6155b609930103d17b21 (diff)
downloadopie-9328bf79f49294e14c1753c9ee17ddd2985c1969.zip
opie-9328bf79f49294e14c1753c9ee17ddd2985c1969.tar.gz
opie-9328bf79f49294e14c1753c9ee17ddd2985c1969.tar.bz2
Fix to prevent segfault when no process/module is selected in list.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/sysinfo/modulesinfo.cpp5
-rw-r--r--noncore/settings/sysinfo/processinfo.cpp7
2 files changed, 11 insertions, 1 deletions
diff --git a/noncore/settings/sysinfo/modulesinfo.cpp b/noncore/settings/sysinfo/modulesinfo.cpp
index 8b58fe9..29cce90 100644
--- a/noncore/settings/sysinfo/modulesinfo.cpp
+++ b/noncore/settings/sysinfo/modulesinfo.cpp
@@ -93,64 +93,69 @@ ModulesInfo::~ModulesInfo()
93void ModulesInfo::updateData() 93void ModulesInfo::updateData()
94{ 94{
95 char modname[64]; 95 char modname[64];
96 char usage[200]; 96 char usage[200];
97 int modsize, usecount; 97 int modsize, usecount;
98 98
99 ModulesView->clear(); 99 ModulesView->clear();
100 100
101 FILE *procfile = fopen( ( QString ) ( "/proc/modules"), "r"); 101 FILE *procfile = fopen( ( QString ) ( "/proc/modules"), "r");
102 102
103 if ( procfile ) 103 if ( procfile )
104 { 104 {
105 while ( true ) { 105 while ( true ) {
106 int success = fscanf( procfile, "%s%d%d%[^\n]", modname, &modsize, &usecount, usage ); 106 int success = fscanf( procfile, "%s%d%d%[^\n]", modname, &modsize, &usecount, usage );
107 107
108 if ( success == EOF ) 108 if ( success == EOF )
109 break; 109 break;
110 110
111 QString qmodname = QString( modname ); 111 QString qmodname = QString( modname );
112 QString qmodsize = QString::number( modsize ).rightJustify( 6, ' ' ); 112 QString qmodsize = QString::number( modsize ).rightJustify( 6, ' ' );
113 QString qusecount = QString::number( usecount ).rightJustify( 2, ' ' ); 113 QString qusecount = QString::number( usecount ).rightJustify( 2, ' ' );
114 QString qusage = QString( usage ); 114 QString qusage = QString( usage );
115 115
116 ( void ) new QListViewItem( ModulesView, qmodname, qmodsize, qusecount, qusage ); 116 ( void ) new QListViewItem( ModulesView, qmodname, qmodsize, qusecount, qusage );
117 } 117 }
118 118
119 fclose( procfile ); 119 fclose( procfile );
120 } 120 }
121} 121}
122 122
123void ModulesInfo::slotSendClicked() 123void ModulesInfo::slotSendClicked()
124{ 124{
125 if ( !ModulesView->currentItem() )
126 {
127 return;
128 }
129
125 QString capstr = tr( "You really want to execute\n" ); 130 QString capstr = tr( "You really want to execute\n" );
126 capstr.append( CommandCB->currentText() ); 131 capstr.append( CommandCB->currentText() );
127 capstr.append( "\nfor this module?" ); 132 capstr.append( "\nfor this module?" );
128 133
129 QString modname = ModulesView->currentItem()->text( 0 ); 134 QString modname = ModulesView->currentItem()->text( 0 );
130 135
131 if ( QMessageBox::warning( this, modname, capstr, 136 if ( QMessageBox::warning( this, modname, capstr,
132 QMessageBox::Yes | QMessageBox::Default, QMessageBox::No | QMessageBox::Escape ) == QMessageBox::Yes ) 137 QMessageBox::Yes | QMessageBox::Default, QMessageBox::No | QMessageBox::Escape ) == QMessageBox::Yes )
133 { 138 {
134 QString command = "/sbin/"; 139 QString command = "/sbin/";
135 command.append( CommandCB->currentText() ); 140 command.append( CommandCB->currentText() );
136 command.append( " " ); 141 command.append( " " );
137 command.append( modname ); 142 command.append( modname );
138 143
139 FILE* stream = popen( command, "r" ); 144 FILE* stream = popen( command, "r" );
140 if ( stream ) 145 if ( stream )
141 pclose( stream ); 146 pclose( stream );
142 } 147 }
143 148
144} 149}
145 150
146void ModulesInfo::viewModules( QListViewItem *modules ) 151void ModulesInfo::viewModules( QListViewItem *modules )
147{ 152{
148 QString modname = modules->text( 0 ); 153 QString modname = modules->text( 0 );
149 QString capstr = "Module: "; 154 QString capstr = "Module: ";
150 capstr.append( modname ); 155 capstr.append( modname );
151 ModulesDtl->setCaption( capstr ); 156 ModulesDtl->setCaption( capstr );
152 QString command = "/sbin/modinfo -nad "; 157 QString command = "/sbin/modinfo -nad ";
153 command.append( modname ); 158 command.append( modname );
154 FILE* modinfo = popen( command, "r" ); 159 FILE* modinfo = popen( command, "r" );
155 160
156 if ( modinfo ) 161 if ( modinfo )
diff --git a/noncore/settings/sysinfo/processinfo.cpp b/noncore/settings/sysinfo/processinfo.cpp
index 35d7ba1..9a5446a 100644
--- a/noncore/settings/sysinfo/processinfo.cpp
+++ b/noncore/settings/sysinfo/processinfo.cpp
@@ -115,69 +115,74 @@ void ProcessInfo::updateData()
115 QString processnum = f->fileName(); 115 QString processnum = f->fileName();
116 if ( processnum >= "1" && processnum <= "99999" ) 116 if ( processnum >= "1" && processnum <= "99999" )
117 { 117 {
118 FILE *procfile = fopen( ( QString ) ( "/proc/" + processnum + "/stat"), "r"); 118 FILE *procfile = fopen( ( QString ) ( "/proc/" + processnum + "/stat"), "r");
119 119
120 if ( procfile ) 120 if ( procfile )
121 { 121 {
122 fscanf( procfile, 122 fscanf( procfile,
123 "%d %s %c %d %d %d %d %d %u %u %u %u %u %d %d %d %d %d %d %u %u %d %u %u %u %u %u %u %u %u %d %d %d %d %u", 123 "%d %s %c %d %d %d %d %d %u %u %u %u %u %d %d %d %d %d %d %u %u %d %u %u %u %u %u %u %u %u %d %d %d %d %u",
124 &pid, comm, &state, &ppid, &pgrp, &session,&tty, &tpgid, &flags, &minflt, &cminflt, 124 &pid, comm, &state, &ppid, &pgrp, &session,&tty, &tpgid, &flags, &minflt, &cminflt,
125 &majflt, &cmajflt, &utime, &stime, &cutime, &cstime, &counter, &priority, &timeout, 125 &majflt, &cmajflt, &utime, &stime, &cutime, &cstime, &counter, &priority, &timeout,
126 &itrealvalue, &starttime, &vsize, &rss, &rlim, &startcode, &endcode, &startstack, 126 &itrealvalue, &starttime, &vsize, &rss, &rlim, &startcode, &endcode, &startstack,
127 &kstkesp, &kstkeip, &signal, &blocked, &sigignore, &sigcatch, &wchan ); 127 &kstkesp, &kstkeip, &signal, &blocked, &sigignore, &sigcatch, &wchan );
128 processnum = processnum.rightJustify( 5, ' ' ); 128 processnum = processnum.rightJustify( 5, ' ' );
129 QString processcmd = QString( comm ).replace( QRegExp( "[()]" ), "" ); 129 QString processcmd = QString( comm ).replace( QRegExp( "[()]" ), "" );
130 QString processstatus = QChar(state); 130 QString processstatus = QChar(state);
131 QString processtime = QString::number( ( utime + stime ) / 100 ); 131 QString processtime = QString::number( ( utime + stime ) / 100 );
132 processtime = processtime.rightJustify( 9, ' ' ); 132 processtime = processtime.rightJustify( 9, ' ' );
133 fclose( procfile ); 133 fclose( procfile );
134 134
135 ( void ) new QListViewItem( ProcessView, processnum, processcmd, processstatus, processtime ); 135 ( void ) new QListViewItem( ProcessView, processnum, processcmd, processstatus, processtime );
136 } 136 }
137 } 137 }
138 } 138 }
139 } 139 }
140 140
141 delete proclist; 141 delete proclist;
142 delete procdir; 142 delete procdir;
143} 143}
144 144
145void ProcessInfo::slotSendClicked() 145void ProcessInfo::slotSendClicked()
146{ 146{
147 QListViewItem *currprocess = ProcessView->currentItem();
148 if ( !currprocess )
149 {
150 return;
151 }
152
147 QString capstr = tr( "You really want to send\n" ); 153 QString capstr = tr( "You really want to send\n" );
148 capstr.append( SignalCB->currentText() ); 154 capstr.append( SignalCB->currentText() );
149 capstr.append( "\nto this process?" ); 155 capstr.append( "\nto this process?" );
150 156
151 QListViewItem *currprocess = ProcessView->currentItem();
152 157
153 if ( QMessageBox::warning( this, currprocess->text( 1 ), capstr, 158 if ( QMessageBox::warning( this, currprocess->text( 1 ), capstr,
154 QMessageBox::Yes | QMessageBox::Default, QMessageBox::No | QMessageBox::Escape ) == QMessageBox::Yes ) 159 QMessageBox::Yes | QMessageBox::Default, QMessageBox::No | QMessageBox::Escape ) == QMessageBox::Yes )
155 { 160 {
156 QString sigstr = SignalCB->currentText(); 161 QString sigstr = SignalCB->currentText();
157 sigstr.truncate(2); 162 sigstr.truncate(2);
158 int sigid = sigstr.toUInt(); 163 int sigid = sigstr.toUInt();
159 if ( kill( currprocess->text( 0 ).stripWhiteSpace().toUInt(), sigid ) == 0 ) 164 if ( kill( currprocess->text( 0 ).stripWhiteSpace().toUInt(), sigid ) == 0 )
160 { 165 {
161 hide(); 166 hide();
162 } 167 }
163 } 168 }
164 169
165} 170}
166 171
167void ProcessInfo::viewProcess( QListViewItem *process ) 172void ProcessInfo::viewProcess( QListViewItem *process )
168{ 173{
169 QString pid= process->text( 0 ).stripWhiteSpace(); 174 QString pid= process->text( 0 ).stripWhiteSpace();
170 QString command = process->text( 1 ); 175 QString command = process->text( 1 );
171 ProcessDtl->setCaption( pid + " - " + command ); 176 ProcessDtl->setCaption( pid + " - " + command );
172 FILE *statfile = fopen( ( QString ) ( "/proc/" + pid + "/status"), "r"); 177 FILE *statfile = fopen( ( QString ) ( "/proc/" + pid + "/status"), "r");
173 if ( statfile ) 178 if ( statfile )
174 { 179 {
175 char line[81]; 180 char line[81];
176 fgets( line, 81, statfile ); 181 fgets( line, 81, statfile );
177 ProcessDtl->detailView->setText( line ); 182 ProcessDtl->detailView->setText( line );
178 while ( fgets( line, 81, statfile ) ) 183 while ( fgets( line, 81, statfile ) )
179 { 184 {
180 ProcessDtl->detailView->append( line ); 185 ProcessDtl->detailView->append( line );
181 } 186 }
182 fclose( statfile ); 187 fclose( statfile );
183 } 188 }