From 5d40c589ac1f330e06d6384ebd150f24f15c04a9 Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Tue, 25 Mar 2003 13:57:25 +0000 Subject: Utility wrapper around icalparser. * cal-util/cal-util.c (cal_util_parse_ics_file): Utility wrapper around icalparser. * cal-util/test-recur.c (main): Use it * pcs/cal-backend-file.c (open_cal): Likewise * gui/comp-editor-factory.c (open_client): Add the OpenClient to the hash before calling cal_client_open_calendar, since in some failure cases, that will call cal_opened_cb (which will free the oc) with a failure immediately, causing a crash if we then try to deref it. svn path=/trunk/; revision=20492 --- calendar/pcs/cal-backend-file.c | 49 +++++------------------------------------ 1 file changed, 6 insertions(+), 43 deletions(-) (limited to 'calendar/pcs/cal-backend-file.c') diff --git a/calendar/pcs/cal-backend-file.c b/calendar/pcs/cal-backend-file.c index 7ab6506aa9..d11df6d076 100644 --- a/calendar/pcs/cal-backend-file.c +++ b/calendar/pcs/cal-backend-file.c @@ -22,6 +22,7 @@ #include #include +#include #include #include #include @@ -679,53 +680,19 @@ scan_vcalendar (CalBackendFile *cbfile) } } -/* Callback used from icalparser_parse() */ -static char * -get_line_fn (char *s, size_t size, void *data) -{ - FILE *file; - - file = data; - return fgets (s, size, file); -} - -/* Parses an open iCalendar file and returns a toplevel component with the contents */ -static icalcomponent * -parse_file (FILE *file) -{ - icalparser *parser; - icalcomponent *icalcomp; - - parser = icalparser_new (); - icalparser_set_gen_data (parser, file); - - icalcomp = icalparser_parse (parser, get_line_fn); - icalparser_free (parser); - - return icalcomp; -} - /* Parses an open iCalendar file and loads it into the backend */ static CalBackendOpenStatus -open_cal (CalBackendFile *cbfile, const char *uristr, FILE *file) +open_cal (CalBackendFile *cbfile, const char *uristr) { CalBackendFilePrivate *priv; icalcomponent *icalcomp; priv = cbfile->priv; - icalcomp = parse_file (file); - - if (fclose (file) != 0) { - if (icalcomp) - icalcomponent_free (icalcomp); - - return CAL_BACKEND_OPEN_ERROR; - } - + icalcomp = cal_util_parse_ics_file (uristr); if (!icalcomp) return CAL_BACKEND_OPEN_ERROR; - + /* FIXME: should we try to demangle XROOT components and * individual components as well? */ @@ -771,7 +738,6 @@ cal_backend_file_open (CalBackend *backend, const char *uristr, gboolean only_if { CalBackendFile *cbfile; CalBackendFilePrivate *priv; - FILE *file; char *str_uri; GnomeVFSURI *uri; CalBackendOpenStatus status; @@ -806,11 +772,8 @@ cal_backend_file_open (CalBackend *backend, const char *uristr, gboolean only_if return CAL_BACKEND_OPEN_ERROR; } - /* Load! */ - file = fopen (str_uri, "r"); - - if (file) - status = open_cal (cbfile, str_uri, file); + if (access (str_uri, R_OK) == 0) + status = open_cal (cbfile, str_uri); else { if (only_if_exists) status = CAL_BACKEND_OPEN_NOT_FOUND; -- cgit v1.2.3