… | |
… | |
56 | if ((skfd = socket (AF_INET, SOCK_DGRAM, 0)) < 0) |
56 | if ((skfd = socket (AF_INET, SOCK_DGRAM, 0)) < 0) |
57 | { |
57 | { |
58 | perror ("socket"); |
58 | perror ("socket"); |
59 | return NULL; |
59 | return NULL; |
60 | } |
60 | } |
|
|
61 | |
61 | if (ioctl (skfd, SIOCGIFCONF, &ifc) < 0) |
62 | if (ioctl (skfd, SIOCGIFCONF, &ifc) < 0) |
62 | { |
63 | { |
63 | perror ("SIOCGIFCONF"); |
64 | perror ("SIOCGIFCONF"); |
64 | close (skfd); |
65 | close (skfd); |
65 | return NULL; |
66 | return NULL; |
66 | } |
67 | } |
|
|
68 | |
67 | for (i = 0, ifr = ifc.ifc_req; |
69 | for (i = 0, ifr = ifc.ifc_req; |
68 | i < (ifc.ifc_len / sizeof (struct ifreq)); |
70 | i < (ifc.ifc_len / sizeof (struct ifreq)); |
69 | i++, ifr++) |
71 | i++, ifr++) |
70 | { |
72 | { |
71 | struct ifreq ifr2; |
73 | struct ifreq ifr2; |
72 | |
74 | |
73 | strcpy (ifr2.ifr_name, ifr->ifr_name); |
75 | strcpy (ifr2.ifr_name, ifr->ifr_name); |
|
|
76 | |
74 | if (ioctl (skfd, SIOCGIFADDR, &ifr2) >= 0) |
77 | if (ioctl (skfd, SIOCGIFADDR, &ifr2) >= 0) |
75 | { |
78 | { |
76 | unsigned long addr; |
79 | unsigned long addr; |
77 | struct sockaddr_in *p_addr; |
80 | struct sockaddr_in *p_addr; |
78 | |
81 | |
79 | p_addr = (struct sockaddr_in *)& (ifr2.ifr_addr); |
82 | p_addr = (struct sockaddr_in *) &ifr2.ifr_addr; |
80 | addr = htonl ((unsigned long)p_addr->sin_addr.s_addr); |
83 | addr = htonl ((unsigned long)p_addr->sin_addr.s_addr); |
81 | |
84 | |
82 | /* |
85 | /* |
83 | * not "0.0.0.0" or "127.0.0.1" - so format the address |
86 | * not "0.0.0.0" or "127.0.0.1" - so format the address |
84 | */ |
87 | */ |
85 | if (addr && addr != 0x7F000001) |
88 | if (addr && addr != 0x7F000001) |
86 | { |
89 | { |
87 | char *colon = strchr (display, ':'); |
90 | char *colon = strchr (display, ':'); |
88 | |
91 | |
89 | if (colon == NULL) |
92 | if (colon == NULL) |
90 | colon = ":0.0"; |
93 | colon = ":0.0"; |
91 | |
94 | |
92 | rval = rxvt_malloc (strlen (colon) + 16); |
95 | rval = rxvt_malloc (strlen (colon) + 16); |
… | |
… | |
99 | } |
102 | } |
100 | } |
103 | } |
101 | } |
104 | } |
102 | |
105 | |
103 | close (skfd); |
106 | close (skfd); |
|
|
107 | |
104 | return rval; |
108 | return rval; |
105 | } |
109 | } |
106 | #endif /* DISPLAY_IS_IP */ |
110 | #endif /* DISPLAY_IS_IP */ |
107 | /*----------------------- end-of-file (C source) -----------------------*/ |
111 | /*----------------------- end-of-file (C source) -----------------------*/ |