if (umad_get_ca(ca_name, &ca) < 0)\r
return -1;\r
\r
- if (ca.numports + 1 > max) {\r
+ if (ca.numports > max) {\r
umad_release_ca(&ca);\r
return -ENOMEM;\r
}\r
\r
- for (i = 0; i <= ca.numports; i++)\r
+ for (i = 1; i <= ca.numports; i++)\r
portguids[ports++] = ca.ports[i]->port_guid;\r
\r
umad_release_ca(&ca);\r
\r
strcpy(ca->ca_name, ca_name);\r
umad_convert_ca_attr(ca, &dev_attr);\r
+ memset(ca->ports, 0, sizeof(ca->ports));\r
\r
- for (i = 0; i < dev_attr.phys_port_cnt; i++, ports += port_size) {\r
+ for (i = 1; i <= dev_attr.phys_port_cnt; i++, ports += port_size) {\r
\r
ca->ports[i] = (umad_port_t *) ports;\r
strcpy(ca->ports[i]->ca_name, ca_name);\r
- ca->ports[i]->portnum = i + 1;\r
+ ca->ports[i]->portnum = i;\r
ca->ports[i]->pkeys = (uint16_t *) (ports + sizeof(umad_port_t));\r
\r
ret = umad_query_port(context, ca->ports[i]);\r
return ret;\r
}\r
\r
- memcpy(port, ca.ports[portnum - 1], sizeof(umad_port_t));\r
+ memcpy(port, ca.ports[portnum], sizeof(umad_port_t));\r
\r
- port->pkeys = new uint16_t[ca.ports[portnum - 1]->pkeys_size];\r
+ port->pkeys = new uint16_t[ca.ports[portnum]->pkeys_size];\r
if (port->pkeys == NULL) {\r
ret = -ENOMEM;\r
goto out;\r
}\r
\r
- memcpy(port->pkeys, ca.ports[portnum - 1]->pkeys,\r
- sizeof(uint16_t) * ca.ports[portnum - 1]->pkeys_size);\r
+ memcpy(port->pkeys, ca.ports[portnum]->pkeys,\r
+ sizeof(uint16_t) * ca.ports[portnum]->pkeys_size);\r
out:\r
umad_release_ca(&ca);\r
return ret;\r
return 0;\r
}\r
\r
- for (i = 0; i < ca.numports; i++) {\r
+ for (i = 1; i <= ca.numports; i++) {\r
if (ca.ports[i]->state == state) {\r
i = ca.ports[i]->portnum;\r
umad_release_ca(&ca);\r