Skip to content

Commit c8648cb

Browse files
author
Lucas C. Villa Real
committed
String manipulation fix.
1 parent d1f5ccc commit c8648cb

File tree

1 file changed

+10
-14
lines changed

1 file changed

+10
-14
lines changed

src/partinfo.c

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ int main(int argc, char **argv)
1616
PedDisk *disk = NULL;
1717
char *user_dev;
1818
char buf[128];
19-
size_t n = sizeof(buf);
19+
size_t n = 0, left = sizeof(buf) - 1;
2020

2121
user_dev = argc > 1 ? argv[1] : NULL;
2222

@@ -29,24 +29,20 @@ int main(int argc, char **argv)
2929
if (part->num < 0)
3030
continue;
3131
memset(buf, 0, sizeof(buf));
32-
snprintf(buf, sizeof(buf)-1, "%s%d:", dev->path, part->num);
33-
n -= strlen(buf) + 1;
32+
n += snprintf(buf, left, "%s%d:", dev->path, part->num);
33+
left -= n;
3434
while ((flag = ped_partition_flag_next(flag))) {
35-
if (ped_partition_get_flag(part, flag)) {
36-
if (n > 0) {
37-
strncat(buf, ped_partition_flag_get_name(flag), n);
38-
n = sizeof(buf) - strlen(buf) - 1;
39-
}
40-
if (n > 0) {
41-
strncat(buf, ",", n);
42-
n--;
43-
}
35+
if (ped_partition_get_flag(part, flag) && left > 0) {
36+
n += snprintf(&buf[n], left, "%s,", ped_partition_flag_get_name(flag));
37+
left -= n;
4438
}
4539
}
46-
if (buf[strlen(buf)-1] == ',')
47-
buf[strlen(buf)-1] = '\0';
40+
if (buf[n-1] == ',')
41+
buf[n-1] = '\0';
4842
printf("%s\n", buf);
43+
left = sizeof(buf) - 1;
4944
flag = 0;
45+
n = 0;
5046
}
5147
part = NULL;
5248
ped_disk_destroy(disk);

0 commit comments

Comments
 (0)