| Fix determining OpenVZ VEID on Linux kernels >= 2.6.18. |
| Index: htop/ProcessList.c |
| =================================================================== |
| --- htop.orig/ProcessList.c 2011-01-16 17:02:59.000000000 +0200 |
| +++ htop/ProcessList.c 2011-01-16 18:05:01.000000000 +0200 |
| @@ -438,19 +438,26 @@ |
| return; |
| } |
| char filename[MAX_NAME+1]; |
| - snprintf(filename, MAX_NAME, "%s/%s/stat", dirname, name); |
| + snprintf(filename, MAX_NAME, "%s/%s/status", dirname, name); |
| FILE* file = fopen(filename, "r"); |
| if (!file) |
| return; |
| - fscanf(file, |
| - "%*u %*s %*c %*u %*u %*u %*u %*u %*u %*u " |
| - "%*u %*u %*u %*u %*u %*u %*u %*u " |
| - "%*u %*u %*u %*u %*u %*u %*u %*u " |
| - "%*u %*u %*u %*u %*u %*u %*u %*u " |
| - "%*u %*u %*u %*u %*u %*u %*u %*u " |
| - "%*u %*u %*u %*u %*u %*u %*u " |
| - "%*u %*u %u %u", |
| - &process->vpid, &process->ctid); |
| + |
| + char buffer[256]; |
| + process->ctid = 0; |
| + while (!feof(file)) { |
| + char* ok = fgets(buffer, 255, file); |
| + if (!ok) |
| + break; |
| + |
| + if (String_startsWith(buffer, "envID:")) { |
| + int ctid; |
| + int ok = sscanf(buffer, "envID:\t%d", &ctid); |
| + if (ok >= 1) { |
| + process->ctid = ctid; |
| + } |
| + } |
| + } |
| fclose(file); |
| } |
| |