#include <sys/sysctl.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "network_cmds_lib.h"
char *
clean_non_printable(char *str, const size_t len)
{
size_t i = 0;
if (str == NULL || len == 0) {
return str;
}
for (i = 0; i < len && str[i] != 0; i++) {
if (isprint(str[i]) == 0) {
str[i] = '?';
}
}
return str;
}
void
dump_hex(const unsigned char *ptr, size_t len)
{
size_t i;
for (i = 0; i < len; i++) {
printf("%02x", ptr[i]);
if (i % 16 == 15) {
printf("\n");
} else if (i % 2 == 1) {
printf(" ");
}
}
if (i % 16 != 0) {
printf("\n");
}
}
uint16_t
in_cksum(uint16_t *addr, uint16_t len)
{
int nleft = len;
uint16_t *w = addr;
uint16_t answer;
uint32_t sum = 0;
while (nleft > 1) {
sum += *w++;
nleft -= 2;
}
if (nleft == 1) {
sum += *(uint8_t *)w;
}
sum = (sum >> 16) + (sum & 0xffff);
sum += (sum >> 16);
answer = ~sum;
return (answer);
}
void
proc_name(pid_t pid, char *buf, size_t buf_len)
{
int name[4];
u_int namelen;
size_t infolen;
struct kinfo_proc info;
name[0] = CTL_KERN;
name[1] = KERN_PROC;
name[2] = KERN_PROC_PID;
name[3] = pid;
namelen = 4;
infolen = sizeof(info);
if (sysctl(name, namelen, &info, &infolen, 0, 0) != 0) {
snprintf(buf, buf_len, "");
return;
}
snprintf(buf, buf_len, "%s", info.kp_proc.p_comm);
}