[Git][debian-gis-team/freexl][experimental] 5 commits: New upstream version 2.0.0~rc1

Bas Couwenberg (@sebastic) gitlab at salsa.debian.org
Mon Jul 5 21:00:12 BST 2021



Bas Couwenberg pushed to branch experimental at Debian GIS Project / freexl


Commits:
ba31ae7a by Bas Couwenberg at 2021-07-05T21:52:51+02:00
New upstream version 2.0.0~rc1
- - - - -
293cec4d by Bas Couwenberg at 2021-07-05T21:52:56+02:00
Update upstream source from tag 'upstream/2.0.0_rc1'

Update to upstream version '2.0.0~rc1'
with Debian dir dbe59058b24c4b6ffb2f0b1f98546bf74c022fec
- - - - -
c55abb44 by Bas Couwenberg at 2021-07-05T21:53:23+02:00
New upstream release candidate.

- - - - -
4779f7f7 by Bas Couwenberg at 2021-07-05T21:55:09+02:00
Rename library packages for reverted SONAME bump.

- - - - -
b328f8b6 by Bas Couwenberg at 2021-07-05T21:55:34+02:00
Set distribution to experimental.

- - - - -


14 changed files:

- configure
- configure.ac
- debian/changelog
- debian/control
- debian/libfreexl3.dirs → debian/libfreexl1.dirs
- debian/libfreexl3.examples → debian/libfreexl1.examples
- debian/libfreexl3.install → debian/libfreexl1.install
- debian/libfreexl3.symbols → debian/libfreexl1.symbols
- headers/freexl_internals.h
- src/Makefile.am
- src/Makefile.in
- src/freexl.c
- src/freexl_ods.c
- src/freexl_xlsx.c


Changes:

=====================================
configure
=====================================
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for FreeXL 2.0.0-RC0.
+# Generated by GNU Autoconf 2.69 for FreeXL 2.0.0-RC1.
 #
 # Report bugs to <a.furieri at lqt.it>.
 #
@@ -590,8 +590,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='FreeXL'
 PACKAGE_TARNAME='freexl'
-PACKAGE_VERSION='2.0.0-RC0'
-PACKAGE_STRING='FreeXL 2.0.0-RC0'
+PACKAGE_VERSION='2.0.0-RC1'
+PACKAGE_STRING='FreeXL 2.0.0-RC1'
 PACKAGE_BUGREPORT='a.furieri at lqt.it'
 PACKAGE_URL=''
 
@@ -1327,7 +1327,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures FreeXL 2.0.0-RC0 to adapt to many kinds of systems.
+\`configure' configures FreeXL 2.0.0-RC1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1397,7 +1397,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of FreeXL 2.0.0-RC0:";;
+     short | recursive ) echo "Configuration of FreeXL 2.0.0-RC1:";;
    esac
   cat <<\_ACEOF
 
@@ -1510,7 +1510,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-FreeXL configure 2.0.0-RC0
+FreeXL configure 2.0.0-RC1
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2054,7 +2054,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by FreeXL $as_me 2.0.0-RC0, which was
+It was created by FreeXL $as_me 2.0.0-RC1, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2925,7 +2925,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='freexl'
- VERSION='2.0.0-RC0'
+ VERSION='2.0.0-RC1'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -17969,7 +17969,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by FreeXL $as_me 2.0.0-RC0, which was
+This file was extended by FreeXL $as_me 2.0.0-RC1, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -18035,7 +18035,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-FreeXL config.status 2.0.0-RC0
+FreeXL config.status 2.0.0-RC1
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 


=====================================
configure.ac
=====================================
@@ -2,7 +2,7 @@
 # Process this file with autoconf to produce a configure script.
 
 AC_PREREQ(2.61)
-AC_INIT(FreeXL, 2.0.0-RC0, a.furieri at lqt.it)
+AC_INIT(FreeXL, 2.0.0-RC1, a.furieri at lqt.it)
 AC_LANG(C)
 AC_CONFIG_AUX_DIR([.])
 AC_CONFIG_MACRO_DIR([m4])


=====================================
debian/changelog
=====================================
@@ -1,3 +1,10 @@
+freexl (2.0.0~rc1-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate.
+  * Rename library packages for reverted SONAME bump.
+
+ -- Bas Couwenberg <sebastic at debian.org>  Mon, 05 Jul 2021 21:55:22 +0200
+
 freexl (2.0.0~rc0-1~exp1) experimental; urgency=medium
 
   * New upstream release candidate.


=====================================
debian/control
=====================================
@@ -17,7 +17,7 @@ Package: libfreexl-dev
 Architecture: any
 Multi-Arch: same
 Section: libdevel
-Depends: libfreexl3 (= ${binary:Version}),
+Depends: libfreexl1 (= ${binary:Version}),
          libexpat1-dev,
          libminizip-dev,
          zlib1g-dev,
@@ -31,7 +31,7 @@ Description: library for direct reading of Microsoft Excel spreadsheets - devel
  .
  This package contains the development headers.
 
-Package: libfreexl3
+Package: libfreexl1
 Architecture: any
 Multi-Arch: same
 Depends: ${shlibs:Depends},


=====================================
debian/libfreexl3.dirs → debian/libfreexl1.dirs
=====================================


=====================================
debian/libfreexl3.examples → debian/libfreexl1.examples
=====================================


=====================================
debian/libfreexl3.install → debian/libfreexl1.install
=====================================


=====================================
debian/libfreexl3.symbols → debian/libfreexl1.symbols
=====================================
@@ -1,4 +1,4 @@
-libfreexl.so.3 #PACKAGE# #MINVER#
+libfreexl.so.1 #PACKAGE# #MINVER#
 * Build-Depends-Package: libfreexl-dev
  freexl_close at Base 0.0.2~beta20110817
  freexl_close_ods at Base 2.0.0~rc0


=====================================
headers/freexl_internals.h
=====================================
@@ -346,6 +346,7 @@ typedef struct xlsx_worksheet_struct
     xlsx_row *last;
     int max_row;
     int max_cell;
+    xlsx_row **rows;
     int error;
     char *CharData;
     int CharDataLen;
@@ -447,6 +448,7 @@ typedef struct ods_worksheet_struct
     ods_row *last;
     int max_row;
     int max_cell;
+    ods_row **rows;
     int RowOk;
     int ColOk;
     int CellValueOk;


=====================================
src/Makefile.am
=====================================
@@ -6,7 +6,7 @@ lib_LTLIBRARIES = libfreexl.la
 
 libfreexl_la_SOURCES = freexl.c freexl_xlsx.c freexl_ods.c
 
-libfreexl_la_LDFLAGS = -version-info 3:0:0 -no-undefined
+libfreexl_la_LDFLAGS = -version-info 3:0:2 -no-undefined
 
 libfreexl_la_LIBADD = -lm
 


=====================================
src/Makefile.in
=====================================
@@ -328,7 +328,7 @@ top_srcdir = @top_srcdir@
 AM_CPPFLAGS = -I$(top_srcdir)/headers -I$(top_srcdir)
 lib_LTLIBRARIES = libfreexl.la 
 libfreexl_la_SOURCES = freexl.c freexl_xlsx.c freexl_ods.c
-libfreexl_la_LDFLAGS = -version-info 3:0:0 -no-undefined
+libfreexl_la_LDFLAGS = -version-info 3:0:2 -no-undefined
 libfreexl_la_LIBADD = -lm
 MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
 all: all-am


=====================================
src/freexl.c
=====================================
@@ -2795,8 +2795,7 @@ read_legacy_biff (biff_workbook * workbook, int swap)
 		      else if (is_datetime)
 			  ret =
 			      set_datetime_double_value (workbook, row, col,
-							 workbook->
-							 biff_date_mode,
+							 workbook->biff_date_mode,
 							 dbl_value);
 		      else if (is_time)
 			  ret =
@@ -3571,8 +3570,7 @@ parse_biff_record (biff_workbook * workbook, int swap)
 		      else if (is_datetime)
 			  ret =
 			      set_datetime_double_value (workbook, row, col,
-							 workbook->
-							 biff_date_mode,
+							 workbook->biff_date_mode,
 							 dbl_value);
 		      else if (is_time)
 			  ret =
@@ -5198,127 +5196,101 @@ get_cell_value_xlsx (xlsx_workbook * workbook, unsigned int row,
 	|| (int) column > workbook->active_sheet->max_cell)
 	return FREEXL_ILLEGAL_CELL_ROW_COL;
 
-    p_row = workbook->active_sheet->first;
-    while (p_row != NULL)
-      {
-	  /* looping on Worksheet rows */
-	  p_col = p_row->first;
-	  while (p_col != NULL)
-	    {
-		p_col = p_col->next;
-	    }
-	  p_row = p_row->next;
-      }
+    if (workbook->active_sheet->rows == NULL)
+	goto stop;
+    p_row = *(workbook->active_sheet->rows + row);
+    if (p_row == NULL)
+	goto stop;
 
-    p_row = workbook->active_sheet->first;
-    while (p_row != NULL)
+    p_col = p_row->first;
+    while (p_col != NULL)
       {
-	  /* looping on Worksheet rows */
-	  if ((unsigned int) (p_row->row_no - 1) == row)
+	  /* looping on row columns */
+	  if ((unsigned int) (p_col->col_no) == column)
 	    {
-		p_col = p_row->first;
-		while (p_col != NULL)
+		if (p_col->assigned)
 		  {
-		      /* looping on row columns */
-		      if ((unsigned int) (p_col->col_no) == column)
+		      /* ok, found the requested Cell */
+		      val->type = FREEXL_CELL_NULL;
+		      if (p_col->is_datetime != XLSX_DATE_NONE)
+			{
+			    /* special case: DATE, TIME, DATETIME */
+			    char *datetime = find_datetime_xlsx (workbook);
+			    double value;
+			    int count;
+			    int hh;
+			    int mm;
+			    int ss;
+			    int year = 1900;
+			    int month = 1;
+			    int day = 1;
+			    if (p_col->type == XLSX_INTEGER)
+			      {
+				  value = 0.0;
+				  count = p_col->int_value;
+			      }
+			    else if (p_col->type == XLSX_DOUBLE)
+			      {
+				  count = (int) floor (p_col->dbl_value);
+				  value = p_col->dbl_value - count;
+			      }
+			    else
+			      {
+				  value = 0.0;
+				  count = 0;
+			      }
+			    compute_time (&hh, &mm, &ss, value);
+			    compute_date (&year, &month, &day, count);
+			    if (p_col->is_datetime == XLSX_DATE_SIMPLE)
+			      {
+				  sprintf (datetime,
+					   "%04d-%02d-%02d", year, month, day);
+				  val->type = FREEXL_CELL_DATE;
+			      }
+			    else if (p_col->is_datetime == XLSX_TIME_SIMPLE)
+			      {
+				  sprintf (datetime,
+					   "%02d:%02d:%02d", hh, mm, ss);
+				  val->type = FREEXL_CELL_TIME;
+			      }
+			    else
+			      {
+				  sprintf (datetime,
+					   "%04d-%02d-%02d %02d:%02d:%02d",
+					   year, month, day, hh, mm, ss);
+				  val->type = FREEXL_CELL_DATETIME;
+			      }
+			    //val->value.text_value = NULL;
+			    val->value.text_value = datetime;
+			}
+		      else
 			{
-			    if (p_col->assigned)
+			    /* ordinary values */
+			    if (p_col->type == XLSX_INTEGER)
 			      {
-				  /* ok, found the requested Cell */
-				  val->type = FREEXL_CELL_NULL;
-				  if (p_col->is_datetime != XLSX_DATE_NONE)
-				    {
-					/* special case: DATE, TIME, DATETIME */
-					char *datetime =
-					    find_datetime_xlsx (workbook);
-					double value;
-					int count;
-					int hh;
-					int mm;
-					int ss;
-					int year = 1900;
-					int month = 1;
-					int day = 1;
-					if (p_col->type == XLSX_INTEGER)
-					  {
-					      value = 0.0;
-					      count = p_col->int_value;
-					  }
-					else if (p_col->type == XLSX_DOUBLE)
-					  {
-					      count =
-						  (int)
-						  floor (p_col->dbl_value);
-					      value = p_col->dbl_value - count;
-					  }
-					else
-					  {
-					      value = 0.0;
-					      count = 0;
-					  }
-					compute_time (&hh, &mm, &ss, value);
-					compute_date (&year, &month, &day,
-						      count);
-					if (p_col->is_datetime ==
-					    XLSX_DATE_SIMPLE)
-					  {
-					      sprintf (datetime,
-						       "%04d-%02d-%02d", year,
-						       month, day);
-					      val->type = FREEXL_CELL_DATE;
-					  }
-					else if (p_col->is_datetime ==
-						 XLSX_TIME_SIMPLE)
-					  {
-					      sprintf (datetime,
-						       "%02d:%02d:%02d", hh, mm,
-						       ss);
-					      val->type = FREEXL_CELL_TIME;
-					  }
-					else
-					  {
-					      sprintf (datetime,
-						       "%04d-%02d-%02d %02d:%02d:%02d",
-						       year, month, day, hh, mm,
-						       ss);
-					      val->type = FREEXL_CELL_DATETIME;
-					  }
-					//val->value.text_value = NULL;
-					val->value.text_value = datetime;
-				    }
-				  else
-				    {
-					/* ordinary values */
-					if (p_col->type == XLSX_INTEGER)
-					  {
-					      val->type = FREEXL_CELL_INT;
-					      val->value.int_value =
-						  p_col->int_value;
-					  }
-					if (p_col->type == XLSX_DOUBLE)
-					  {
-					      val->type = FREEXL_CELL_DOUBLE;
-					      val->value.double_value =
-						  p_col->dbl_value;
-					  }
-					if (p_col->type == XLSX_STR_INDEX)
-					  {
-					      val->type = FREEXL_CELL_SST_TEXT;
-					      val->value.text_value =
-						  *(workbook->strings +
-						    p_col->str_index);
-					  }
-				    }
-				  return FREEXL_OK;
+				  val->type = FREEXL_CELL_INT;
+				  val->value.int_value = p_col->int_value;
+			      }
+			    if (p_col->type == XLSX_DOUBLE)
+			      {
+				  val->type = FREEXL_CELL_DOUBLE;
+				  val->value.double_value = p_col->dbl_value;
+			      }
+			    if (p_col->type == XLSX_STR_INDEX)
+			      {
+				  val->type = FREEXL_CELL_SST_TEXT;
+				  val->value.text_value =
+				      *(workbook->strings + p_col->str_index);
 			      }
 			}
-		      p_col = p_col->next;
+		      return FREEXL_OK;
 		  }
 	    }
-	  p_row = p_row->next;
+	  p_col = p_col->next;
       }
 
 /* any undefined Cell is assumed to be NULL */
+  stop:
     val->type = FREEXL_CELL_NULL;
     return FREEXL_OK;
 }
@@ -5354,62 +5326,56 @@ get_cell_value_ods (ods_workbook * workbook, unsigned int row,
 	|| (int) column > workbook->active_sheet->max_cell)
 	return FREEXL_ILLEGAL_CELL_ROW_COL;
 
-    p_row = workbook->active_sheet->first;
-    while (p_row != NULL)
+    if (workbook->active_sheet->rows == NULL)
+	goto stop;
+    p_row = *(workbook->active_sheet->rows + row);
+    if (p_row == NULL)
+	goto stop;
+
+    p_col = p_row->first;
+    while (p_col != NULL)
       {
-	  /* looping on Worksheet rows */
-	  if ((unsigned int) (p_row->row_no - 1) == row)
+	  /* looping on row columns */
+	  if ((unsigned int) (p_col->col_no) == column)
 	    {
-		p_col = p_row->first;
-		while (p_col != NULL)
+		if (p_col->assigned)
 		  {
-		      /* looping on row columns */
-		      if ((unsigned int) (p_col->col_no) == column)
+		      /* ok, found the requested Cell */
+		      val->type = FREEXL_CELL_NULL;
+		      if (p_col->type == ODS_INTEGER
+			  || p_col->type == ODS_BOOLEAN)
 			{
-			    if (p_col->assigned)
-			      {
-				  /* ok, found the requested Cell */
-				  val->type = FREEXL_CELL_NULL;
-				  if (p_col->type == ODS_INTEGER
-				      || p_col->type == ODS_BOOLEAN)
-				    {
-					val->type = FREEXL_CELL_INT;
-					val->value.int_value = p_col->int_value;
-				    }
-				  if (p_col->type == ODS_FLOAT
-				      || p_col->type == ODS_CURRENCY
-				      || p_col->type == ODS_PERCENTAGE)
-				    {
-					val->type = FREEXL_CELL_DOUBLE;
-					val->value.double_value =
-					    p_col->dbl_value;
-				    }
-				  if (p_col->type == ODS_STRING
-				      || p_col->type == ODS_TIME)
-				    {
-					val->type = FREEXL_CELL_TEXT;
-					val->value.text_value =
-					    p_col->txt_value;
-				    }
-				  if (p_col->type == ODS_DATE)
-				    {
-					char *datetime =
-					    find_datetime_ods (workbook);
-					strcpy (datetime, p_col->txt_value);
-					adjust_ods_datetime (datetime);
-					val->value.text_value = datetime;
-					val->type = FREEXL_CELL_TEXT;
-				    }
-				  return FREEXL_OK;
-			      }
+			    val->type = FREEXL_CELL_INT;
+			    val->value.int_value = p_col->int_value;
+			}
+		      if (p_col->type == ODS_FLOAT
+			  || p_col->type == ODS_CURRENCY
+			  || p_col->type == ODS_PERCENTAGE)
+			{
+			    val->type = FREEXL_CELL_DOUBLE;
+			    val->value.double_value = p_col->dbl_value;
+			}
+		      if (p_col->type == ODS_STRING || p_col->type == ODS_TIME)
+			{
+			    val->type = FREEXL_CELL_TEXT;
+			    val->value.text_value = p_col->txt_value;
+			}
+		      if (p_col->type == ODS_DATE)
+			{
+			    char *datetime = find_datetime_ods (workbook);
+			    strcpy (datetime, p_col->txt_value);
+			    adjust_ods_datetime (datetime);
+			    val->value.text_value = datetime;
+			    val->type = FREEXL_CELL_TEXT;
 			}
-		      p_col = p_col->next;
+		      return FREEXL_OK;
 		  }
 	    }
-	  p_row = p_row->next;
+	  p_col = p_col->next;
       }
 
 /* any undefined Cell is assumed to be NULL */
+  stop:
     val->type = FREEXL_CELL_NULL;
     return FREEXL_OK;
 }


=====================================
src/freexl_ods.c
=====================================
@@ -174,6 +174,8 @@ destroy_worksheet (ods_worksheet * ws)
       }
     if (ws->name != NULL)
 	free (ws->name);
+    if (ws->rows != NULL)
+	free (ws->rows);
     free (ws);
 }
 
@@ -320,6 +322,7 @@ do_add_worksheet (ods_workbook * workbook, char *name)
     ws->last = NULL;
     ws->max_row = -1;
     ws->max_cell = -1;
+    ws->rows = NULL;
     ws->RowOk = 0;
     ws->ColOk = 0;
     ws->CellValueOk = 0;
@@ -762,13 +765,14 @@ do_fetch_ods_worksheets (unzFile uf, ods_workbook * workbook)
 	  while (ws != NULL)
 	    {
 		int max_col_no = -1;
+		ods_cell *cell;
 		ods_row *row = ws->first;
 		ws->max_row = -1;
 		ws->max_cell = -1;
 		while (row != NULL)
 		  {
 		      max_col_no = -1;
-		      ods_cell *cell = row->first;
+		      cell = row->first;
 		      row->max_cell = -1;
 		      while (cell != NULL)
 			{
@@ -789,6 +793,36 @@ do_fetch_ods_worksheets (unzFile uf, ods_workbook * workbook)
 			}
 		      row = row->next;
 		  }
+		if (ws->max_row > 0)
+		  {
+		      /* creating and populating the ROWS Array */
+		      int i;
+		      ws->rows =
+			  malloc (sizeof (ods_row *) * (ws->max_row + 1));
+		      for (i = 0; i < ws->max_row; i++)
+			  *(ws->rows + i) = NULL;
+		      row = ws->first;
+		      while (row != NULL)
+			{
+			    max_col_no = -1;
+			    cell = row->first;
+			    while (cell != NULL)
+			      {
+				  if (cell->assigned && cell->type != ODS_VOID)
+				    {
+					if (cell->col_no > max_col_no)
+					    max_col_no = cell->col_no;
+				    }
+				  cell = cell->next;
+			      }
+			    if (max_col_no >= 0)
+			      {
+				  if (row->row_no > 0)
+				      *(ws->rows + row->row_no - 1) = row;
+			      }
+			    row = row->next;
+			}
+		  }
 		ws = ws->next;
 	    }
       }


=====================================
src/freexl_xlsx.c
=====================================
@@ -210,6 +210,8 @@ destroy_worksheet (xlsx_worksheet * ws)
       }
     if (ws->name != NULL)
 	free (ws->name);
+    if (ws->rows != NULL)
+	free (ws->rows);
     if (ws->CharData != NULL)
 	free (ws->CharData);
     free (ws);
@@ -509,6 +511,8 @@ sheet_start_tag (void *data, const char *el, const char **attr)
 		int s = -1;
 		int col_no = -1;
 		int type = XLSX_NULL;
+		attrib = attr;
+		count = 0;
 		while (*attrib != NULL)
 		  {
 		      if ((count % 2) == 0)
@@ -581,6 +585,12 @@ set_xlsx_cell_value (xlsx_worksheet * worksheet, const char *val)
     if (cell == NULL)
 	return;
 
+	if (cell->type == XLSX_NULL && val != NULL)
+	{
+	/* it could be an Integer or Double */
+		cell->type = XLSX_INTEGER;
+	}
+	
     if (cell->type == XLSX_STR_INDEX)
       {
 	  cell->str_index = atoi (val);
@@ -753,6 +763,7 @@ do_add_worksheet (xlsx_workbook * workbook, int id, char *name)
     ws->last = NULL;
     ws->max_row = -1;
     ws->max_cell = -1;
+    ws->rows = NULL;
     ws->error = 0;
     ws->CharDataStep = 65536;
     ws->CharDataMax = ws->CharDataStep;
@@ -1490,13 +1501,14 @@ freexl_open_xlsx (const char *path, const void **xl_handle)
 	  while (ws != NULL)
 	    {
 		int max_col_no = -1;
+		xlsx_cell *cell;
 		xlsx_row *row = ws->first;
 		ws->max_row = -1;
 		ws->max_cell = -1;
 		while (row != NULL)
 		  {
 		      max_col_no = -1;
-		      xlsx_cell *cell = row->first;
+		      cell = row->first;
 		      row->max_cell = -1;
 		      while (cell != NULL)
 			{
@@ -1517,6 +1529,36 @@ freexl_open_xlsx (const char *path, const void **xl_handle)
 			}
 		      row = row->next;
 		  }
+		if (ws->max_row > 0)
+		  {
+		      /* creating and populating the ROWS Array */
+		      int i;
+		      ws->rows =
+			  malloc (sizeof (ods_row *) * (ws->max_row + 1));
+		      for (i = 0; i < ws->max_row; i++)
+			  *(ws->rows + i) = NULL;
+		      row = ws->first;
+		      while (row != NULL)
+			{
+			    max_col_no = -1;
+			    cell = row->first;
+			    while (cell != NULL)
+			      {
+				  if (cell->assigned && cell->type != ODS_VOID)
+				    {
+					if (cell->col_no > max_col_no)
+					    max_col_no = cell->col_no;
+				    }
+				  cell = cell->next;
+			      }
+			    if (max_col_no >= 0)
+			      {
+				  if (row->row_no > 0)
+				      *(ws->rows + row->row_no - 1) = row;
+			      }
+			    row = row->next;
+			}
+		  }
 		ws = ws->next;
 	    }
       }



View it on GitLab: https://salsa.debian.org/debian-gis-team/freexl/-/compare/265190109c8c99677b7cba3a33ca61f85e6e434e...b328f8b606d06ce2718e8bb9e20df7d41a95dcb7

-- 
View it on GitLab: https://salsa.debian.org/debian-gis-team/freexl/-/compare/265190109c8c99677b7cba3a33ca61f85e6e434e...b328f8b606d06ce2718e8bb9e20df7d41a95dcb7
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-grass-devel/attachments/20210705/c2614b3c/attachment-0001.htm>


More information about the Pkg-grass-devel mailing list