fix bug displaying junk in the interface list pref dialog

conf.c, line 317 assigns the current address of the if_list variable
to another variable.

        item->list      = if_list;

since the list is later freed,realloced,etc,its address may and does
change, so the stored pointer in item->list points to junk.

issue experienced after starting wavemon linked against musl libc
for the second time (supposedly after creating a config file on
the first run).
the issue may not be experienced with other malloc implementations
(for example glibcs) with "luck", but it's still undefined behaviour
to access a pointer to freed storage.

there are 2 possibly fixes; one is to store a pointer to the list
rather than the list itself in the conf list, however this involves
making ugly changes and dealing with char*** in a lot of places.
the solution i went for is to make if_list a bounded array whose
address never changes (only those of its items).
the list is set to a maximum of 64 entries, so this wastes at most
64*(sizeof (char*)) bytes, which is 512 bytes on 64bit cpus.
having more interfaces would not be practical, as you can only iterate
through the interface list in a forwards/backwards fashion rather than
direct access.

additionally a call to strncpy was replaced with snprintf, as strncpy
may not zero-terminate given a long enough input string, and otherwise
does unnecessary padding. (see man 3p strncpy for details)
fix bug displaying junk in the Statistics panel

RX: 14008446640942345432 (131068.84 GiB),...

there are actually 2 bugs:
1) the format specifier "%L" is for long doubles, not long longs
Per POSIX:

       L      Specifies that a following a, A, e, E, f, F, g, or G  conversion
              specifier applies to a long double argument.

L is only intended to be used with long doubles, not long long ints.

the proper way is to use "ll" instead.

2) if the selected interface name happened to be a substring of an earlier
   interface returned in /proc/net/dev, the line was erroneusly misdetected
   as the correct line due to a strncmp check, and then the pointer adjusted
   to point to the tail of the wrong interface name, which was then passed to
   sscanf (without checking the sscanf return value).

(gdb)
if_getstat (ifname=0x7f95f39b4560 "wlan0", stat=0x7fff35b49ff0) at iw_if.c:150
150             const char path[] = "/proc/net/dev";
(gdb)
161                     if (!strncmp(lp, ifname, strlen(ifname))) {
(gdb) p lp
$8 = 0x7fff35b49dd0 "wlan0mon: 685419138 3954722    0 3956376    0     0          0         0        0       0    0    0    0     0       0          0\n"
(gdb) n
162                             lp += strlen(ifname) + 1;
(gdb) n
163                             lp += strspn(lp, " ");
(gdb) n
165                             sscanf(lp, "%Lu %Lu %lu %lu %lu %lu %lu %lu %Lu %Lu",
(gdb) p lp
$9 = 0x7fff35b49dd6 "on: 685419138 3954722    0 3956376    0     0          0
Merge pull request #3 from rofl0r/interface-bug

Merging two commits from GitHub user roflr that fix interface bugs including referencing free'd objects and incorrect format specifiers.