]>
git.ipfire.org Git - thirdparty/util-linux.git/blob - libfdisk/src/utils.c
9 * Zeros in-memory first sector buffer
11 void fdisk_zeroize_firstsector(struct fdisk_context
*cxt
)
13 if (!cxt
|| !cxt
->firstsector
)
16 DBG(CONTEXT
, ul_debug("zeroize in-memory first sector buffer"));
17 memset(cxt
->firstsector
, 0, cxt
->sector_size
);
20 int fdisk_read_firstsector(struct fdisk_context
*cxt
)
25 assert(cxt
->sector_size
);
27 DBG(TOPOLOGY
, ul_debug("initialize first sector "
28 "buffer [sector_size=%lu]", cxt
->sector_size
));
30 if (!cxt
->firstsector
) {
31 cxt
->firstsector
= calloc(1, cxt
->sector_size
);
32 if (!cxt
->firstsector
)
35 fdisk_zeroize_firstsector(cxt
);
37 r
= read(cxt
->dev_fd
, cxt
->firstsector
, cxt
->sector_size
);
39 if (r
!= cxt
->sector_size
) {
41 errno
= EINVAL
; /* probably too small file/device */
42 DBG(TOPOLOGY
, ul_debug("failed to read first sector %m"));
50 * Return allocated buffer with partition name
52 char *fdisk_partname(const char *dev
, size_t partno
)
59 if (asprintf(&res
, "%zd", partno
) > 0)
65 if (isdigit(dev
[w
- 1]))
68 /* devfs kludge - note: fdisk partition names are not supposed
69 to equal kernel names, so there is no reason to do this */
70 if (strcmp(dev
+ w
- 4, "disc") == 0) {
75 /* udev names partitions by appending -partN
76 e.g. ata-SAMSUNG_SV8004H_0357J1FT712448-part1 */
77 if ((strncmp(dev
, _PATH_DEV_BYID
, sizeof(_PATH_DEV_BYID
) - 1) == 0) ||
78 strncmp(dev
, _PATH_DEV_BYPATH
, sizeof(_PATH_DEV_BYPATH
) - 1) == 0) {
82 if (asprintf(&res
, "%.*s%s%zu", w
, dev
, p
, partno
) > 0)
89 struct fdisk_label
*fdisk_new_dos_label(struct fdisk_context
*cxt
) { return NULL
; }
90 struct fdisk_label
*fdisk_new_bsd_label(struct fdisk_context
*cxt
) { return NULL
; }
92 int test_partnames(struct fdisk_test
*ts
, int argc
, char *argv
[])
95 const char *disk
= argv
[1];
97 for (i
= 0; i
< 5; i
++) {
98 char *p
= fdisk_partname(disk
, i
+ 1);
100 printf("%zu: '%s'\n", i
+ 1, p
);
107 int main(int argc
, char *argv
[])
109 struct fdisk_test tss
[] = {
110 { "--partnames", test_partnames
, "<diskname>" },
114 return fdisk_run_test(tss
, argc
, argv
);