+procps-3.3.0 --> procps-ng-3.3.1
+--------------------------------
+
+ * Fixed pgrep -u not finding processes
+ * Fixed pgrep crashing
+ * vmstat -p <part> finds partitions. Was Debian patch vmstat_part_format
+ fixes closed bugs RH#485243 and Debian#588677
+
procps-3.2.8 --> procps-ng-3.3.0
------------------------------------------------------
Debian, Fedora and openSUSE fork of procps.
}
+/////////////////////////////////////////////////////////////////////////////
+static int is_disk(char *dev)
+{
+ char syspath[32];
+ char *slash;
+
+ while ((slash = strchr(dev, '/')))
+ *slash = '!';
+ snprintf(syspath, sizeof(syspath), "/sys/block/%s", dev);
+ return !(access(syspath, F_OK));
+}
+
/////////////////////////////////////////////////////////////////////////////
unsigned int getdiskstat(struct disk_stat **disks, struct partition_stat **partitions){
int cPartition = 0;
int fields;
unsigned dummy;
+ char devname[32];
*disks = NULL;
*partitions = NULL;
fclose(fd);
break;
}
- fields = sscanf(buff, " %*d %*d %*s %*u %*u %*u %*u %*u %*u %*u %*u %*u %*u %u", &dummy);
- (*disks) = realloc(*disks, (cDisk+1)*sizeof(struct disk_stat));
- if (fields == 1){
+ fields = sscanf(buff, " %*d %*d %15s %*u %*u %*u %*u %*u %*u %*u %*u %*u %*u %u", devname, &dummy);
+ if (fields == 2 && is_disk(devname)){
+ (*disks) = realloc(*disks, (cDisk+1)*sizeof(struct disk_stat));
sscanf(buff, " %*d %*d %15s %u %u %llu %u %u %u %llu %u %u %u %u",
//&disk_major,
//&disk_minor,
}else{
(*partitions) = realloc(*partitions, (cPartition+1)*sizeof(struct partition_stat));
fflush(stdout);
- sscanf(buff, " %*d %*d %15s %u %llu %u %u",
+ sscanf(buff, (fields == 2)
+ ? " %*d %*d %15s %u %*u %llu %*u %u %*u %llu %*u %*u %*u %*u"
+ : " %*d %*d %15s %u %llu %u %llu",
//&part_major,
//&part_minor,
(*partitions)[cPartition].partition_name,
struct disk_stat *disks;
struct partition_stat *partitions, *current_partition=NULL;
unsigned long ndisks, j, k, npartitions;
- const char format[] = "%20u %10llu %10u %10u\n";
+ const char format[] = "%20u %10llu %10u %10llu\n";
fDiskstat=fopen("/proc/diskstats","rb");
if(!fDiskstat){