Lines 901-942
void geo_get(GEOMETRY *geo,int device,in
Link Here
|
901 |
DEVICE dev; |
901 |
DEVICE dev; |
902 |
struct dm_task *dmt; |
902 |
struct dm_task *dmt; |
903 |
void *next = NULL; |
903 |
void *next = NULL; |
904 |
char dmdev[PATH_MAX+1]; |
|
|
905 |
char buf[PATH_MAX+1]; |
904 |
char buf[PATH_MAX+1]; |
906 |
char *slash; |
|
|
907 |
int result; |
905 |
int result; |
908 |
|
906 |
|
909 |
dev_open(&dev, device, -1); |
907 |
dev_open(&dev, device, -1); |
910 |
strncpy(dmdev, dev.name, PATH_MAX); |
|
|
911 |
dmdev[PATH_MAX] = 0; |
912 |
do { |
913 |
memset(buf, 0, PATH_MAX + 1); |
914 |
if ((result = readlink(dmdev, buf, PATH_MAX)) < 0 && errno != EINVAL) |
915 |
die("device-mapper: readlink(\"%s\") failed with: %s",buf, |
916 |
strerror(errno)); |
917 |
if (result >= 0) { |
918 |
if (buf[0] != '/' && (slash = strrchr(dmdev, '/')) != NULL) |
919 |
slash++; |
920 |
else |
921 |
slash = dmdev; |
922 |
strncpy(slash, buf, PATH_MAX - (slash-dmdev)); |
923 |
} |
924 |
if (realpath(dmdev, buf) == NULL) |
925 |
die("device-mapper: realpath(\"%s\") failed with: %s",dmdev, |
926 |
strerror(errno)); |
927 |
strncpy(dmdev, buf, PATH_MAX); |
928 |
} while (result >= 0); |
929 |
dmdev[PATH_MAX] = 0; |
930 |
|
908 |
|
931 |
if (!(dmt = dm_task_create(DM_DEVICE_TABLE))) |
909 |
if (!(dmt = dm_task_create(DM_DEVICE_TABLE))) |
932 |
die("device-mapper: dm_task_create(DM_DEVICE_TABLE) failed"); |
910 |
die("device-mapper: dm_task_create(DM_DEVICE_TABLE) failed"); |
933 |
slash = strrchr(dmdev, '/'); |
911 |
if (!dm_task_set_name(dmt, dev.name)) |
934 |
if (slash) |
912 |
die("device-mapper: dm_task_set_name(\"%s\") failed",dev.name); |
935 |
slash++; |
|
|
936 |
else |
937 |
slash = dmdev; |
938 |
if (!dm_task_set_name(dmt, slash)) |
939 |
die("device-mapper: dm_task_set_name(\"%s\") failed",dmdev); |
940 |
if (!dm_task_run(dmt)) |
913 |
if (!dm_task_run(dmt)) |
941 |
die("device-mapper: dm_task_run(DM_DEVICE_TABLE) failed"); |
914 |
die("device-mapper: dm_task_run(DM_DEVICE_TABLE) failed"); |
942 |
|
915 |
|