From: Rob Norris Date: Wed, 10 Oct 2012 21:40:49 +0000 (+0100) Subject: Correct layer read definition + enable reporting of issues from gpspoint parts in... X-Git-Url: https://git.street.me.uk/andy/viking.git/commitdiff_plain/119ada4c560795285edd8902fd4854a0792bcd64?hp=327a25338deb8f0d91318cf6c55292478c539881 Correct layer read definition + enable reporting of issues from gpspoint parts in .vik files Blank sections of gpspoint parts in .vik files is OK, so don't report them. --- diff --git a/src/file.c b/src/file.c index 1e9bf629..f185a467 100644 --- a/src/file.c +++ b/src/file.c @@ -392,9 +392,11 @@ static gboolean file_read ( VikAggregateLayer *top, FILE *f, VikViewport *vp ) else if ( str_starts_with ( line, "LayerData", 9, FALSE ) ) { if ( stack->data && vik_layer_get_interface(VIK_LAYER(stack->data)->type)->read_file_data ) - vik_layer_get_interface(VIK_LAYER(stack->data)->type)->read_file_data ( VIK_LAYER(stack->data), f ); + { /* must read until hits ~EndLayerData */ - + if ( ! vik_layer_get_interface(VIK_LAYER(stack->data)->type)->read_file_data ( VIK_LAYER(stack->data), f ) ) + successful_read = FALSE; + } else { /* simply skip layer data over */ while ( fgets ( buffer, 4096, f ) ) diff --git a/src/gpspoint.c b/src/gpspoint.c index 5ab5aa46..ab0537d6 100644 --- a/src/gpspoint.c +++ b/src/gpspoint.c @@ -170,8 +170,11 @@ gboolean a_gpspoint_read_file(VikTrwLayer *trw, FILE *f ) { line_buffer[strlen(line_buffer)-1] = '\0'; /* chop off newline */ /* for gpspoint files wrapped inside */ - if ( strlen(line_buffer) >= 13 && strncmp ( line_buffer, "~EndLayerData", 13 ) == 0 ) + if ( strlen(line_buffer) >= 13 && strncmp ( line_buffer, "~EndLayerData", 13 ) == 0 ) { + // Even just a blank TRW is ok when in a .vik file + have_read_something = TRUE; break; + } /* each line: nullify stuff, make thing if nes, free name if ness */ tag_start = line_buffer; diff --git a/src/viklayer.h b/src/viklayer.h index cabf573c..3f35cbbc 100644 --- a/src/viklayer.h +++ b/src/viklayer.h @@ -167,7 +167,7 @@ typedef gboolean (*VikLayerFuncSetParam) (VikLayer *, guint16, typedef VikLayerParamData (*VikLayerFuncGetParam) (VikLayer *, guint16, gboolean); -typedef void (*VikLayerFuncReadFileData) (VikLayer *, FILE *); +typedef gboolean (*VikLayerFuncReadFileData) (VikLayer *, FILE *); // Should report success or failure typedef void (*VikLayerFuncWriteFileData) (VikLayer *, FILE *); /* item manipulation */