diff options
author | David Cantrell <dcantrell@redhat.com> | 2007-04-05 16:02:39 +0000 |
---|---|---|
committer | David Cantrell <dcantrell@redhat.com> | 2007-04-05 16:02:39 +0000 |
commit | 7d9c0629470fcfb68a41b0c8b4395de65c910d59 (patch) | |
tree | 98d90de02987279ea754859cbe913622adaba0ff /isys | |
parent | 0d74d77e70caaf4175a64fd260cd90e654d35923 (diff) | |
download | anaconda-7d9c0629470fcfb68a41b0c8b4395de65c910d59.tar.gz anaconda-7d9c0629470fcfb68a41b0c8b4395de65c910d59.tar.xz anaconda-7d9c0629470fcfb68a41b0c8b4395de65c910d59.zip |
* isys/dasd.c: Fix the formatting and check return values on
things that give us return values.
Diffstat (limited to 'isys')
-rw-r--r-- | isys/dasd.c | 192 |
1 files changed, 104 insertions, 88 deletions
diff --git a/isys/dasd.c b/isys/dasd.c index 6ad981830..44a1cb8cc 100644 --- a/isys/dasd.c +++ b/isys/dasd.c @@ -21,28 +21,25 @@ typedef struct vtoc_volume_label volume_label_t; #endif - #if defined(__s390__) || defined(__s390x__) /* s390 stuff to detect DASDs */ static int read_vlabel(dasd_information_t *dasd_info, int fd, int blksize, volume_label_t *vlabel) { - int rc; - unsigned long vlabel_start = dasd_info->label_block * blksize; + int rc; + unsigned long vlabel_start = dasd_info->label_block * blksize; - memset(vlabel, 0, sizeof(volume_label_t)); + memset(vlabel, 0, sizeof(volume_label_t)); - if (lseek(fd, vlabel_start, SEEK_SET) < 0) { - /* fprintf(stderr, "Could not read volume label.\n"); */ - return 2; - } + if (lseek(fd, vlabel_start, SEEK_SET) < 0) { + return 2; + } - rc = read(fd, vlabel, sizeof(volume_label_t)); - if (rc != sizeof(volume_label_t)) { - /* fprintf(stderr, "Could not read volume label, DASD is probably unformatted\n"); */ - return 1; - } + rc = read(fd, vlabel, sizeof(volume_label_t)); + if (rc != sizeof(volume_label_t)) { + return 1; + } - return 0; + return 0; } #endif @@ -50,93 +47,112 @@ int isUsableDasd(char *device) { #if !defined(__s390__) && !defined(__s390x__) return 0; #else - char devname[16]; - char label[5], v4_hex[9]; - char l4ebcdic_hex[] = "d3d5e7f1"; /* LNX1 */ - char cms1_hex[] = "c3d4e2f1"; /* CMS1 */ - int f, ret, blksize; - dasd_information_t dasd_info; - volume_label_t vlabel; - memset(&dasd_info, 0, sizeof(dasd_info)); - strcpy(devname, "/dev/"); - strcat(devname, device); - devMakeInode(device, devname); - if((f = open(devname, O_RDONLY)) == -1) { - return 0; - } - if (ioctl(f, BLKSSZGET, &blksize) != 0) { - close(f); - /* fprintf(stderr, "Could not retrieve blocksize information!\n"); */ - return 0; - } - if (ioctl(f, BIODASDINFO, &dasd_info) != 0) { - close(f); - /* fprintf(stderr, "Could not retrieve disk information!\n"); */ - return 0; - } - ret = read_vlabel(&dasd_info, f, blksize, &vlabel); + char devname[16]; + char label[5], v4_hex[9]; + char l4ebcdic_hex[] = "d3d5e7f1"; /* LNX1 */ + char cms1_hex[] = "c3d4e2f1"; /* CMS1 */ + int f, ret, blksize; + dasd_information_t dasd_info; + volume_label_t vlabel; + + memset(&dasd_info, 0, sizeof(dasd_info)); + devname = strcpy(devname, "/dev/"); + devname = strcat(devname, device); + devMakeInode(device, devname); + + if ((f = open(devname, O_RDONLY)) == -1) + return 0; + + if (ioctl(f, BLKSSZGET, &blksize) != 0) { close(f); + return 0; + } - if (ret == 2) { - return 0; - } else if (ret == 1) { /* probably unformatted DASD */ - /* fprintf(stderr, "Found a usable device: %s\n", devname); */ - return 1; - } - memset(label, 0, 5); - memset(v4_hex, 0, 9); - strncpy(label, vlabel.volkey, 4); - sprintf(v4_hex, "%02x%02x%02x%02x", label[0], label[1], label[2], label[3]); - - if(!strncmp(v4_hex, cms1_hex, 9)) { - return 0; - } - if(!strncmp(v4_hex, l4ebcdic_hex, 9)) { - return 2; - } + if (ioctl(f, BIODASDINFO, &dasd_info) != 0) { + close(f); + return 0; + } + + ret = read_vlabel(&dasd_info, f, blksize, &vlabel); + close(f); + + if (ret == 2) + return 0; + else if (ret == 1) /* probably unformatted DASD */ return 1; + + memset(label, 0, 5); + memset(v4_hex, 0, 9); + label = strncpy(label, vlabel.volkey, 4); + + ret = sprintf(v4_hex, "%02x%02x%02x%02x", label[0], label[1], + label[2], label[3]); + if (ret < 0 || ret < strlen(cms1_hex)) + return 3; + + if (!strncmp(v4_hex, cms1_hex, 9)) + return 0; + + if (!strncmp(v4_hex, l4ebcdic_hex, 9)) + return 2; + + return 1; #endif } int isLdlDasd(char * device) { - return (isUsableDasd(device) == 2); + return (isUsableDasd(device) == 2); } char *getDasdPorts() { #if !defined(__s390__) && !defined(__s390x__) return 0; #else - char * line, *ports = NULL; - char devname[7]; - char port[10]; - FILE *fd; - int ret; - fd = fopen ("/proc/dasd/devices", "r"); - if(!fd) { - return NULL; - } - line = (char *)malloc(100*sizeof(char)); - while (fgets (line, 100, fd) != NULL) { - if ((strstr(line, "unknown") != NULL)) { - continue; - } - if (strstr(line, "(FBA )") != NULL) { - ret = sscanf (line, "%[A-Za-z.0-9](FBA ) at ( %*d: %*d) is %s : %*s", port, devname); - } else { - ret = sscanf (line, "%[A-Za-z.0-9](ECKD) at ( %*d: %*d) is %s : %*s", port, devname); - } - if (ret == 2) { - if(!ports) { - ports = (char *)malloc(strlen(port) + 1); - strcpy(ports, port); - } else { - ports = (char *)realloc(ports, strlen(ports) + strlen(port) + 2); - strcat(ports, ","); - strcat(ports, port); - } - } + char * line, *ports = NULL; + char devname[7]; + char port[10]; + FILE *fd; + int ret, sz; + + fd = fopen("/proc/dasd/devices", "r"); + if (!fd) + return NULL; + + if ((line = (char *)malloc(100 * sizeof(char))) == NULL) + return NULL; + + while (fgets(line, 100, fd) != NULL) { + if ((strstr(line, "unknown") != NULL)) + continue; + + if (strstr(line, "(FBA )") != NULL) + ret = sscanf(line, "%[A-Za-z.0-9](FBA ) at ( %*d: %*d) is %s : %*s", port, devname); + else + ret = sscanf(line, "%[A-Za-z.0-9](ECKD) at ( %*d: %*d) is %s : %*s", port, devname); + + if (ret == 2) { + if (!ports) { + sz = strlen(port) + 1; + if ((ports = (char *) malloc(sz)) == NULL) + return NULL; + + ports = strcpy(ports, port); + } else { + sz = strlen(ports) + strlen(port) + 2; + if ((ports = (char *) realloc(ports, sz)) == NULL) + return NULL; + + ports = strcat(ports, ","); + ports = strcat(ports, port); + } } - if (fd) fclose(fd); - return ports; + } + + if (fd) + fclose(fd); + + return ports; #endif } + +/* vim:set shiftwidth=4 softtabstop=4: */ |