static void do_loadfont(int fd, unsigned char *inbuf, int unit, int fontsize) { char *buf; int i; if (unit < 1 || unit > 32) bb_error_msg_and_die("bad character size %d", unit); buf = xzalloc(16 * 1024); for (i = 0; i < fontsize; i++) memcpy(buf + (32 * i), inbuf + (unit * i), unit); #if defined(PIO_FONTX) && !defined(__sparc__) { struct consolefontdesc cfd; cfd.charcount = fontsize; cfd.charheight = unit; cfd.chardata = buf; if (!ioctl_or_perror(fd, PIO_FONTX, &cfd, "PIO_FONTX ioctl failed (will try PIO_FONT)")) goto ret; /* success */ } #endif xioctl(fd, PIO_FONT, buf); ret: free(buf); }
int FAST_FUNC udhcp_read_interface(const char *interface, int *ifindex, uint32_t *nip, uint8_t *mac, uint16_t *mtu) { /* char buffer instead of bona-fide struct avoids aliasing warning */ char ifr_buf[sizeof(struct ifreq)]; struct ifreq *const ifr = (void *)ifr_buf; int fd; struct sockaddr_in *our_ip; memset(ifr, 0, sizeof(*ifr)); fd = xsocket(AF_INET, SOCK_RAW, IPPROTO_RAW); ifr->ifr_addr.sa_family = AF_INET; strncpy_IFNAMSIZ(ifr->ifr_name, interface); if (nip) { if (ioctl_or_perror(fd, SIOCGIFADDR, ifr, "is interface %s up and configured?", interface) ) { close(fd); return -1; } our_ip = (struct sockaddr_in *) &ifr->ifr_addr; *nip = our_ip->sin_addr.s_addr; log1("IP %s", inet_ntoa(our_ip->sin_addr)); } if (ifindex) { if (ioctl_or_warn(fd, SIOCGIFINDEX, ifr) != 0) { close(fd); return -1; } log1("Adapter index %d", ifr->ifr_ifindex); *ifindex = ifr->ifr_ifindex; } if (mac) { if (ioctl_or_warn(fd, SIOCGIFHWADDR, ifr) != 0) { close(fd); return -1; } memcpy(mac, ifr->ifr_hwaddr.sa_data, 6); log1("MAC %02x:%02x:%02x:%02x:%02x:%02x", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); } if (mtu) { if (ioctl_or_warn(fd, SIOCGIFMTU, ifr) != 0) { close(fd); return -1; } log1("Adapter mtu %d", ifr->ifr_mtu); *mtu = ifr->ifr_mtu; } close(fd); return 0; }
int FAST_FUNC udhcp_read_interface(const char *interface, int *ifindex, uint32_t *nip, uint8_t *mac) { int fd; struct ifreq ifr; struct sockaddr_in *our_ip; memset(&ifr, 0, sizeof(ifr)); fd = xsocket(AF_INET, SOCK_RAW, IPPROTO_RAW); ifr.ifr_addr.sa_family = AF_INET; strncpy(ifr.ifr_name, interface, sizeof(ifr.ifr_name)); if (nip) { if (ioctl_or_perror(fd, SIOCGIFADDR, &ifr, "is interface %s up and configured?", interface) ) { close(fd); return -1; } our_ip = (struct sockaddr_in *) &ifr.ifr_addr; *nip = our_ip->sin_addr.s_addr; log1("IP %s", inet_ntoa(our_ip->sin_addr)); } if (ifindex) { if (ioctl_or_warn(fd, SIOCGIFINDEX, &ifr) != 0) { close(fd); return -1; } log1("Adapter index %d", ifr.ifr_ifindex); *ifindex = ifr.ifr_ifindex; } if (mac) { if (ioctl_or_warn(fd, SIOCGIFHWADDR, &ifr) != 0) { close(fd); return -1; } memcpy(mac, ifr.ifr_hwaddr.sa_data, 6); log1("MAC %02x:%02x:%02x:%02x:%02x:%02x", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); } close(fd); return 0; }
int read_interface(const char *interface, int *ifindex, uint32_t *addr, uint8_t *arp) { int fd; struct ifreq ifr; struct sockaddr_in *our_ip; memset(&ifr, 0, sizeof(ifr)); fd = xsocket(AF_INET, SOCK_RAW, IPPROTO_RAW); ifr.ifr_addr.sa_family = AF_INET; strncpy(ifr.ifr_name, interface, sizeof(ifr.ifr_name)); if (addr) { if (ioctl_or_perror(fd, SIOCGIFADDR, &ifr, "is interface %s up and configured?", interface) ) { close(fd); return -1; } our_ip = (struct sockaddr_in *) &ifr.ifr_addr; *addr = our_ip->sin_addr.s_addr; DEBUG("%s (our ip) = %s", ifr.ifr_name, inet_ntoa(our_ip->sin_addr)); } if (ifindex) { if (ioctl_or_warn(fd, SIOCGIFINDEX, &ifr) != 0) { close(fd); return -1; } DEBUG("adapter index %d", ifr.ifr_ifindex); *ifindex = ifr.ifr_ifindex; } if (arp) { if (ioctl_or_warn(fd, SIOCGIFHWADDR, &ifr) != 0) { close(fd); return -1; } memcpy(arp, ifr.ifr_hwaddr.sa_data, 6); DEBUG("adapter hardware address %02x:%02x:%02x:%02x:%02x:%02x", arp[0], arp[1], arp[2], arp[3], arp[4], arp[5]); } close(fd); return 0; }
int dumpkmap_main(int argc, char **argv) { struct kbentry ke; int i, j, fd; char flags[MAX_NR_KEYMAPS]; if (argc >= 2 && argv[1][0] == '-') bb_show_usage(); fd = xopen(CURRENT_VC, O_RDWR); write(1, "bkeymap", 7); /* Here we want to set everything to 0 except for indexes: * [0-2] [4-6] [8-10] [12] */ memset(flags, 0x00, MAX_NR_KEYMAPS); memset(flags, 0x01, 13); flags[3] = flags[7] = flags[11] = 0; /* dump flags */ write(1, flags, MAX_NR_KEYMAPS); for (i = 0; i < MAX_NR_KEYMAPS; i++) { if (flags[i] == 1) { for (j = 0; j < NR_KEYS; j++) { ke.kb_index = j; ke.kb_table = i; if (!ioctl_or_perror(fd, KDGKBENT, &ke, "ioctl failed with %s, %s, %p", (char *)&ke.kb_index, (char *)&ke.kb_table, &ke.kb_value) ) { write(1, (void*)&ke.kb_value, 2); } } } } close(fd); return EXIT_SUCCESS; }