All pastes #14855 Raw Edit

Anonymous

public text v1 · immutable
#14855 ·published 2005-06-17 11:27 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 IntPtr 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(object source, object type) {
		GFunc handle_foreach;
		object ret;
		IntPtr error = IntPtr.Zero;

		IntPtr raw_ret = (IntPtr.Zero);
		//= 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);

		IntPtr o = (IntPtr) ret;
		g_slist_foreach (raw_ret, handle_foreach, ref o);

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