All pastes #14849 Raw Edit

varadhan

public text v1 · immutable
#14849 ·published 2005-06-17 10:55 UTC
rendered paste body
                private delegate void GFunc (IntPtr data, string[] user_data);

                [DllImport("glib-2.0")]
                static extern void g_slist_foreach (IntPtr slist, GFunc foreach_callback, ref string[] user_data);

                [DllImport("glib-2.0")]
                static extern int g_slist_length (IntPtr slist);

                private static void foreach_callback (IntPtr data, string[] user_data)
                {
                        user_data [user_data.Length] = GLib.Marshaller.PtrToStringGFree (data);
                }

                [DllImport("ecal")]
                static extern unsafe IntPtr e_cal_get_events_from_source(IntPtr source, int type, out IntPtr error);

                public static string[] GetEventsFromSource(Evolution.Source source, Evolution.CalSourceType type) {
                        GFunc handle_foreach;
                        string[] ret;
                        IntPtr error = IntPtr.Zero;

                        IntPtr raw_ret = e_cal_get_events_from_source(source.Handle, (int) type, out error);

                        ret = new String [g_slist_length (raw_ret)];
                        handle_foreach = new GFunc (foreach_callback);

                        g_slist_foreach (raw_ret, handle_foreach, ref ret);

                        if (error != IntPtr.Zero) throw new GLib.GException (error);
                        return ret;
                }