diff --git a/cangen.c b/cangen.c index ae6de4a..6c8e91e 100644 --- a/cangen.c +++ b/cangen.c @@ -596,24 +596,24 @@ int main(int argc, char **argv) return 1; } - if (strlen(argv[optind]) >= IFNAMSIZ) { - printf("Name of CAN device '%s' is too long!\n\n", argv[optind]); - return 1; - } - s = socket(PF_CAN, SOCK_RAW, CAN_RAW); if (s < 0) { perror("socket"); return 1; } - addr.can_family = AF_CAN; - addr.can_ifindex = if_nametoindex(argv[optind]); - if (!addr.can_ifindex) { + strncpy(ifr.ifr_name, argv[optind], IFNAMSIZ - 1); + ifr.ifr_name[IFNAMSIZ - 1] = '\0'; + ifr.ifr_ifindex = if_nametoindex(ifr.ifr_name); + if (!ifr.ifr_ifindex) { perror("if_nametoindex"); return 1; } + memset(&addr, 0, sizeof(addr)); + addr.can_family = AF_CAN; + addr.can_ifindex = ifr.ifr_ifindex; + /* * disable default receive filter on this RAW socket * This is obsolete as we do not read from the socket at all, but for