4 using System.Runtime.InteropServices;
10 internal class Utility
13 private static extern int strlen (IntPtr ptr);
15 [DllImport ("avahi-common")]
16 private static extern IntPtr avahi_address_snprint (IntPtr buf, int size, IntPtr address);
18 public static string PtrToString (IntPtr ptr)
20 if (ptr == IntPtr.Zero)
23 int len = strlen (ptr);
24 byte[] bytes = new byte[len];
25 Marshal.Copy (ptr, bytes, 0, len);
26 return Encoding.UTF8.GetString (bytes);
29 public static string PtrToStringFree (IntPtr ptr)
31 if (ptr == IntPtr.Zero)
34 string ret = PtrToString (ptr);
39 public static IntPtr StringToPtr (string str)
44 byte[] bytes = Encoding.UTF8.GetBytes (str);
45 IntPtr buf = Stdlib.malloc ((uint) bytes.Length + 1);
46 Marshal.Copy (bytes, 0, buf, bytes.Length);
47 Marshal.WriteByte (buf, bytes.Length, 0);
51 public static void Free (IntPtr ptr)
56 public static IPAddress PtrToAddress (IntPtr ptr)
58 IPAddress address = null;
60 if (ptr != IntPtr.Zero) {
61 IntPtr buf = Stdlib.malloc (256);
62 IntPtr addrPtr = avahi_address_snprint (buf, 256, ptr);
63 address = IPAddress.Parse (Utility.PtrToString (addrPtr));
64 Utility.Free (addrPtr);