This is eniutils.c in view mode; [Download] [Up]
#include <stdio.h> #include <strings.h> #include "eniutils.h" /* Convert an ethernet address to a string. */ char *addr_to_hex(unsigned char *eaddr, char str[ADDR_STR_LEN]) { char htab[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'} ; int i ; for(i = 0 ; i < 6 ; i++) { str[2*i] = htab[(*(eaddr + i) >> 4)] ; str[2*i+1] = htab[(*(eaddr + i) & 0xf)] ; } str[ADDR_STR_LEN - 1] = '\0' ; return &str[0] ; } /* Convert a hex string to an ethernet address. Return 1 if successful, 0 otherwise. */ int hex_to_addr(char *str, unsigned char *addr) { int i ; for(i = 0 ; i < 6 ; i++) { unsigned char n ; n = *(str + 2 * i) ; if(n >= '0' && n <= '9') { addr[i] = (n - '0') << 4 ; } else if(n >= 'a' && n <= 'f') { addr[i] = (n - 'a' + 10) << 4 ; } else { return 0 ; } n = *(str + 2 * i + 1) ; if(n >= '0' && n <= '9') { addr[i] += (n - '0') ; } else if(n >= 'a' && n <= 'f') { addr[i] += (n - 'a' + 10) ; } else if(n >= 'A' && n <= 'F') { addr[i] += (n - 'A' + 10) ; } else { return 0 ; } } return 1 ; } /* * * Truly miscellaneus routines. * */ int get_ether_addr(char *host, unsigned char eaddr[], char *etherfile) { FILE *fp ; char e[64] ; char h[64] ; char line[128] ; if((fp = fopen(etherfile, "r")) == (FILE *)0) { return 0 ; } else { while(fgets(line, sizeof line, fp) != (char *)0) { if(sscanf(line, "%s %s", h, e) != 2) { fprintf(stderr, "get_ether_addr: bad input line [%s]\n", line) ; } else { if(strcmp(h, host) == 0) { return hex_to_addr(e, eaddr) ; } } } fprintf(stderr, "get_ether_addr: address for %s not found.\n", host) ; return 0 ; } } void nuke_newline(char *s) { char *n ; if((n = rindex(s, '\n')) != (char *)0) { *n = '\0' ; } } char *tail(char *path) { char *p ; return (p = rindex(path, '/')) == (char *)0 ? path : ++p ; }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.