.. | .. |
---|
270 | 270 | { |
---|
271 | 271 | ray_dev_t *local; |
---|
272 | 272 | struct net_device *dev; |
---|
| 273 | + int ret; |
---|
273 | 274 | |
---|
274 | 275 | dev_dbg(&p_dev->dev, "ray_attach()\n"); |
---|
275 | 276 | |
---|
276 | 277 | /* Allocate space for private device-specific data */ |
---|
277 | 278 | dev = alloc_etherdev(sizeof(ray_dev_t)); |
---|
278 | 279 | if (!dev) |
---|
279 | | - goto fail_alloc_dev; |
---|
| 280 | + return -ENOMEM; |
---|
280 | 281 | |
---|
281 | 282 | local = netdev_priv(dev); |
---|
282 | 283 | local->finder = p_dev; |
---|
.. | .. |
---|
313 | 314 | timer_setup(&local->timer, NULL, 0); |
---|
314 | 315 | |
---|
315 | 316 | this_device = p_dev; |
---|
316 | | - return ray_config(p_dev); |
---|
| 317 | + ret = ray_config(p_dev); |
---|
| 318 | + if (ret) |
---|
| 319 | + goto err_free_dev; |
---|
317 | 320 | |
---|
318 | | -fail_alloc_dev: |
---|
319 | | - return -ENOMEM; |
---|
320 | | -} /* ray_attach */ |
---|
| 321 | + return 0; |
---|
| 322 | + |
---|
| 323 | +err_free_dev: |
---|
| 324 | + free_netdev(dev); |
---|
| 325 | + return ret; |
---|
| 326 | +} |
---|
321 | 327 | |
---|
322 | 328 | static void ray_detach(struct pcmcia_device *link) |
---|
323 | 329 | { |
---|
.. | .. |
---|
1641 | 1647 | /*===========================================================================*/ |
---|
1642 | 1648 | static int parse_addr(char *in_str, UCHAR *out) |
---|
1643 | 1649 | { |
---|
| 1650 | + int i, k; |
---|
1644 | 1651 | int len; |
---|
1645 | | - int i, j, k; |
---|
1646 | | - int status; |
---|
1647 | 1652 | |
---|
1648 | 1653 | if (in_str == NULL) |
---|
1649 | 1654 | return 0; |
---|
1650 | | - if ((len = strlen(in_str)) < 2) |
---|
| 1655 | + len = strnlen(in_str, ADDRLEN * 2 + 1) - 1; |
---|
| 1656 | + if (len < 1) |
---|
1651 | 1657 | return 0; |
---|
1652 | 1658 | memset(out, 0, ADDRLEN); |
---|
1653 | 1659 | |
---|
1654 | | - status = 1; |
---|
1655 | | - j = len - 1; |
---|
1656 | | - if (j > 12) |
---|
1657 | | - j = 12; |
---|
1658 | 1660 | i = 5; |
---|
1659 | 1661 | |
---|
1660 | | - while (j > 0) { |
---|
1661 | | - if ((k = hex_to_bin(in_str[j--])) != -1) |
---|
| 1662 | + while (len > 0) { |
---|
| 1663 | + if ((k = hex_to_bin(in_str[len--])) != -1) |
---|
1662 | 1664 | out[i] = k; |
---|
1663 | 1665 | else |
---|
1664 | 1666 | return 0; |
---|
1665 | 1667 | |
---|
1666 | | - if (j == 0) |
---|
| 1668 | + if (len == 0) |
---|
1667 | 1669 | break; |
---|
1668 | | - if ((k = hex_to_bin(in_str[j--])) != -1) |
---|
| 1670 | + if ((k = hex_to_bin(in_str[len--])) != -1) |
---|
1669 | 1671 | out[i] += k << 4; |
---|
1670 | 1672 | else |
---|
1671 | 1673 | return 0; |
---|
1672 | 1674 | if (!i--) |
---|
1673 | 1675 | break; |
---|
1674 | 1676 | } |
---|
1675 | | - return status; |
---|
| 1677 | + return 1; |
---|
1676 | 1678 | } |
---|
1677 | 1679 | |
---|
1678 | 1680 | /*===========================================================================*/ |
---|