static void print_all_devices_pt(struct fdisk_context *cxt) { FILE *f; char line[128 + 1]; f = fopen(_PATH_PROC_PARTITIONS, "r"); if (!f) { warn(_("cannot open %s"), _PATH_PROC_PARTITIONS); return; } DBG(FRONTEND, dbgprint("reading "_PATH_PROC_PARTITIONS)); while (fgets(line, sizeof(line), f)) { char ptname[128 + 1], devname[256]; if (sscanf(line, " %*d %*d %*d %128[^\n ]", ptname) != 1) continue; snprintf(devname, sizeof(devname), "/dev/%s", ptname); DBG(FRONTEND, dbgprint("listing %s", devname)); if (is_whole_disk(devname)) { char *cn = canonicalize_path(devname); if (cn) { if (!is_ide_cdrom_or_tape(cn)) print_device_pt(cxt, cn); free(cn); } } } fclose(f); }
char *next_proc_partition(FILE **f) { char line[128 + 1]; if (!*f) { *f = fopen(_PATH_PROC_PARTITIONS, "r"); if (!*f) { warn(_("cannot open %s"), _PATH_PROC_PARTITIONS); return NULL; } } while (fgets(line, sizeof(line), *f)) { char buf[PATH_MAX], *cn; dev_t devno; if (sscanf(line, " %*d %*d %*d %128[^\n ]", buf) != 1) continue; devno = sysfs_devname_to_devno(buf, NULL); if (devno <= 0) continue; if (sysfs_devno_is_lvm_private(devno) || sysfs_devno_is_wholedisk(devno) <= 0) continue; if (!sysfs_devno_to_devpath(devno, buf, sizeof(buf))) continue; cn = canonicalize_path(buf); if (!cn) continue; if (!is_ide_cdrom_or_tape(cn)) return cn; } fclose(*f); *f = NULL; return NULL; }