summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2007-12-17 05:57:28 +0000
committerHisham Muhammad <hisham@gobolinux.org>2007-12-17 05:57:28 +0000
commitcf7fdcd1d69d19bd9662cd1a9665dffe30f5b5b1 (patch)
tree254f5962aa1fa017efd7ecadd9e9c6ab51ccf9d6
parenta839c3f2ca5a11b2293ad0c588859d38aa98d194 (diff)
Experimental feature: beep on permission failures.
Update dates.
-rw-r--r--Process.c9
-rw-r--r--Process.h4
-rw-r--r--htop.c46
3 files changed, 34 insertions, 25 deletions
diff --git a/Process.c b/Process.c
index ed49bace..ef97451a 100644
--- a/Process.c
+++ b/Process.c
@@ -42,7 +42,7 @@ typedef enum ProcessField_ {
STIME, CUTIME, CSTIME, PRIORITY, NICE, ITREALVALUE, STARTTIME, VSIZE, RSS, RLIM, STARTCODE, ENDCODE,
STARTSTACK, KSTKESP, KSTKEIP, SIGNAL, BLOCKED, SSIGIGNORE, SIGCATCH, WCHAN, NSWAP, CNSWAP, EXIT_SIGNAL,
PROCESSOR, M_SIZE, M_RESIDENT, M_SHARE, M_TRS, M_DRS, M_LRS, M_DT, ST_UID, PERCENT_CPU, PERCENT_MEM,
- USER, TIME, NLWP, TGID
+ USER, TIME, NLWP, TGID,
#ifdef HAVE_OPENVZ
VEID, VPID,
#endif
@@ -187,12 +187,13 @@ void Process_toggleTag(Process* this) {
this->tag = this->tag == true ? false : true;
}
-void Process_setPriority(Process* this, int priority) {
+bool Process_setPriority(Process* this, int priority) {
int old_prio = getpriority(PRIO_PROCESS, this->pid);
int err = setpriority(PRIO_PROCESS, this->pid, priority);
if (err == 0 && old_prio != getpriority(PRIO_PROCESS, this->pid)) {
this->nice = priority;
}
+ return (err == 0);
}
unsigned long Process_getAffinity(Process* this) {
@@ -201,8 +202,8 @@ unsigned long Process_getAffinity(Process* this) {
return mask;
}
-void Process_setAffinity(Process* this, unsigned long mask) {
- sched_setaffinity(this->pid, sizeof(unsigned long), (cpu_set_t*) &mask);
+bool Process_setAffinity(Process* this, unsigned long mask) {
+ return (sched_setaffinity(this->pid, sizeof(unsigned long), (cpu_set_t*) &mask) == 0);
}
void Process_sendSignal(Process* this, int signal) {
diff --git a/Process.h b/Process.h
index 778d4644..a1783305 100644
--- a/Process.h
+++ b/Process.h
@@ -141,11 +141,11 @@ void Process_display(Object* cast, RichString* out);
void Process_toggleTag(Process* this);
-void Process_setPriority(Process* this, int priority);
+bool Process_setPriority(Process* this, int priority);
unsigned long Process_getAffinity(Process* this);
-void Process_setAffinity(Process* this, unsigned long mask);
+bool Process_setAffinity(Process* this, unsigned long mask);
void Process_sendSignal(Process* this, int signal);
diff --git a/htop.c b/htop.c
index 15e3c3e9..274f61a2 100644
--- a/htop.c
+++ b/htop.c
@@ -1,6 +1,6 @@
/*
htop - htop.c
-(C) 2004-2006 Hisham H. Muhammad
+(C) 2004-2007 Hisham H. Muhammad
Released under the GNU GPL, see the COPYING file
in the source distribution for its full text.
*/
@@ -36,14 +36,14 @@ in the source distribution for its full text.
void printVersionFlag() {
clear();
- printf("htop " VERSION " - (C) 2004-2006 Hisham Muhammad.\n");
+ printf("htop " VERSION " - (C) 2004-2007 Hisham Muhammad.\n");
printf("Released under the GNU GPL.\n\n");
exit(0);
}
void printHelpFlag() {
clear();
- printf("htop " VERSION " - (C) 2004-2006 Hisham Muhammad.\n");
+ printf("htop " VERSION " - (C) 2004-2007 Hisham Muhammad.\n");
printf("Released under the GNU GPL.\n\n");
printf("-d DELAY Delay between updates, in tenths of seconds\n\n");
printf("-u USERNAME Show only processes of a given user\n\n");
@@ -56,7 +56,7 @@ void printHelpFlag() {
void showHelp(ProcessList* pl) {
clear();
attrset(CRT_colors[HELP_BOLD]);
- mvaddstr(0, 0, "htop " VERSION " - (C) 2004-2006 Hisham Muhammad.");
+ mvaddstr(0, 0, "htop " VERSION " - (C) 2004-2007 Hisham Muhammad.");
mvaddstr(1, 0, "Released under the GNU GPL. See 'man' page for more info.");
attrset(CRT_colors[DEFAULT_COLOR]);
@@ -151,18 +151,21 @@ static void Setup_run(Settings* settings, int headerHeight) {
}
static bool changePriority(Panel* panel, int delta) {
+ bool ok = true;
bool anyTagged = false;
for (int i = 0; i < Panel_getSize(panel); i++) {
Process* p = (Process*) Panel_get(panel, i);
if (p->tag) {
- Process_setPriority(p, p->nice + delta);
+ ok = Process_setPriority(p, p->nice + delta) && ok;
anyTagged = true;
}
}
if (!anyTagged) {
Process* p = (Process*) Panel_getSelected(panel);
- Process_setPriority(p, p->nice + delta);
+ ok = Process_setPriority(p, p->nice + delta) && ok;
}
+ if (!ok)
+ beep();
return anyTagged;
}
@@ -608,20 +611,25 @@ int main(int argc, char** argv) {
Panel* affinityPanel = AffinityPanel_new(pl->processorCount, curr);
- char* fuFunctions[2] = {"Toggle ", "Done "};
- pickFromList(panel, affinityPanel, 15, headerHeight, fuFunctions, defaultBar);
- unsigned long new = AffinityPanel_getAffinity(affinityPanel);
- bool anyTagged = false;
- for (int i = 0; i < Panel_getSize(panel); i++) {
- Process* p = (Process*) Panel_get(panel, i);
- if (p->tag) {
- Process_setAffinity(p, new);
- anyTagged = true;
+ char* fuFunctions[2] = {"Set ", "Cancel "};
+ void* set = pickFromList(panel, affinityPanel, 15, headerHeight, fuFunctions, defaultBar);
+ if (set) {
+ unsigned long new = AffinityPanel_getAffinity(affinityPanel);
+ bool anyTagged = false;
+ bool ok = true;
+ for (int i = 0; i < Panel_getSize(panel); i++) {
+ Process* p = (Process*) Panel_get(panel, i);
+ if (p->tag) {
+ ok = Process_setAffinity(p, new) && ok;
+ anyTagged = true;
+ }
}
- }
- if (!anyTagged) {
- Process* p = (Process*) Panel_getSelected(panel);
- Process_setAffinity(p, new);
+ if (!anyTagged) {
+ Process* p = (Process*) Panel_getSelected(panel);
+ ok = Process_setAffinity(p, new) && ok;
+ }
+ if (!ok)
+ beep();
}
((Object*)affinityPanel)->delete((Object*)affinityPanel);
Panel_setRichHeader(panel, ProcessList_printHeader(pl));