[Git][debian-gis-team/routino][master] Add patch by Helmut Grohne to fix cross building. (closes: #1121852)

Bas Couwenberg (@sebastic) gitlab at salsa.debian.org
Wed Dec 3 17:37:23 GMT 2025



Bas Couwenberg pushed to branch master at Debian GIS Project / routino


Commits:
2176d367 by Bas Couwenberg at 2025-12-03T18:37:10+01:00
Add patch by Helmut Grohne to fix cross building. (closes: #1121852)

- - - - -


4 changed files:

- debian/changelog
- + debian/patches/cross.patch
- debian/patches/series
- − src/#nodesx.c#


Changes:

=====================================
debian/changelog
=====================================
@@ -1,6 +1,8 @@
 routino (3.4.3-3) UNRELEASED; urgency=medium
 
   * Use debrebuild instead of reprotest.
+  * Add patch by Helmut Grohne to fix cross building.
+    (closes: #1121852)
 
  -- Bas Couwenberg <sebastic at debian.org>  Fri, 28 Nov 2025 12:12:08 +0100
 


=====================================
debian/patches/cross.patch
=====================================
@@ -0,0 +1,23 @@
+Description: Default LD to CC to fix cross building.
+Author: Helmut Grohne <helmut at subdivi.de>
+Bug-Debian: https://bugs.debian.org/1121852
+Forwarded: mailto:amb at routino.org
+
+--- a/Makefile.conf
++++ b/Makefile.conf
+@@ -71,13 +71,13 @@ LIBVERSION=$(SOVERSION).0.0
+ # Compilation programs
+ CC=gcc
+ CXX=g++
+-LD=gcc
++LD=$(CC)
+ 
+ ifdef CLANG
+   ifeq ($(CLANG),1)
+     CC=clang
+     CXX=clang++
+-    LD=clang
++    LD=$(CC)
+   endif
+ endif
+ 


=====================================
debian/patches/series
=====================================
@@ -7,3 +7,4 @@ hardening
 #map_bounds
 #use_openlayers
 clean.patch
+cross.patch


=====================================
src/#nodesx.c# deleted
=====================================
@@ -1,904 +0,0 @@
-/***************************************
- Extented Node data type functions.
-
- Part of the Routino routing software.
- ******************/ /******************
- This file Copyright 2008-2015, 2019, 2020, 2022 Andrew M. Bishop
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- GNU Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License
- along with this program.  If not, see <http://www.gnu.org/licenses/>.
- ***************************************/
-
-
-#include <stdlib.h>
-#include <string.h>
-
-#include "types.h"
-#include "nodes.h"
-
-#include "typesx.h"
-#include "nodesx.h"
-#include "segmentsx.h"
-#include "waysx.h"
-
-#include "files.h"
-#include "logging.h"
-#include "sorting.h"
-
-
-/* Global variables */
-
-/*+ The command line '--tmpdir' option or its default value. +*/
-extern char *option_tmpdirname;
-
-/* Local variables */
-
-/*+ Temporary file-local variables for use by the sort functions (re-initialised for each sort). +*/
-static NodesX *sortnodesx;
-static latlong_t lat_min,lat_max,lon_min,lon_max;
-
-/* Local functions */
-
-static int sort_by_id(NodeX *a,NodeX *b);
-static int deduplicate_and_index_by_id(NodeX *nodex,index_t index);
-
-static int update_id(NodeX *nodex,index_t index);
-static int sort_by_lat_long(NodeX *a,NodeX *b);
-static int index_by_lat_long(NodeX *nodex,index_t index);
-
-
-/*++++++++++++++++++++++++++++++++++++++
-  Allocate a new node list (create a new file or open an existing one).
-
-  NodesX *NewNodeList Returns a pointer to the node list.
-
-  int append Set to 1 if the file is to be opened for appending.
-
-  int readonly Set to 1 if the file is to be opened for reading.
-  ++++++++++++++++++++++++++++++++++++++*/
-
-NodesX *NewNodeList(int append,int readonly)
-{
- NodesX *nodesx;
-
- nodesx=(NodesX*)calloc_logassert(1,sizeof(NodesX));
-
- nodesx->filename    =(char*)malloc_logassert(strlen(option_tmpdirname)+32);
- nodesx->filename_tmp=(char*)malloc_logassert(strlen(option_tmpdirname)+40); /* allow %p to be up to 20 bytes */
-
- sprintf(nodesx->filename    ,"%s/nodesx.parsed.mem",option_tmpdirname);
- sprintf(nodesx->filename_tmp,"%s/nodesx.%p.tmp"    ,option_tmpdirname,(void*)nodesx);
-
- if(append || readonly)
-    if(ExistsFile(nodesx->filename))
-      {
-       offset_t size;
-
-       size=SizeFile(nodesx->filename);
-
-       nodesx->number=size/sizeof(NodeX);
-
-       RenameFile(nodesx->filename,nodesx->filename_tmp);
-      }
-
- if(append)
-    nodesx->fd=OpenFileBufferedAppend(nodesx->filename_tmp);
- else if(!readonly)
-    nodesx->fd=OpenFileBufferedNew(nodesx->filename_tmp);
- else
-    nodesx->fd=-1;
-
-#if SLIM
- nodesx->cache=NewNodeXCache();
- log_malloc(nodesx->cache,sizeof(*nodesx->cache));
-#endif
-
- nodesx->ifilename_tmp=(char*)malloc_logassert(strlen(option_tmpdirname)+40); /* allow %p to be up to 20 bytes */
-
- sprintf(nodesx->ifilename_tmp,"%s/nodesx.%p.idx.tmp",option_tmpdirname,(void*)nodesx);
-
- return(nodesx);
-}
-
-
-/*++++++++++++++++++++++++++++++++++++++
-  Free a node list.
-
-  NodesX *nodesx The set of nodes to be freed.
-
-  int keep If set then the results file is to be kept.
-  ++++++++++++++++++++++++++++++++++++++*/
-
-void FreeNodeList(NodesX *nodesx,int keep)
-{
- if(keep)
-    RenameFile(nodesx->filename_tmp,nodesx->filename);
- else
-    DeleteFile(nodesx->filename_tmp);
-
- free(nodesx->filename);
- free(nodesx->filename_tmp);
-
- DeleteFile(nodesx->ifilename_tmp);
-
- free(nodesx->ifilename_tmp);
-
- if(nodesx->gdata)
-   {
-    log_free(nodesx->gdata);
-    free(nodesx->gdata);
-   }
-
- if(nodesx->pdata)
-   {
-    log_free(nodesx->pdata);
-    free(nodesx->pdata);
-   }
-
- if(nodesx->super)
-   {
-    log_free(nodesx->super);
-    free(nodesx->super);
-   }
-
-#if SLIM
- log_free(nodesx->cache);
- DeleteNodeXCache(nodesx->cache);
-#endif
-
- free(nodesx);
-}
-
-
-/*++++++++++++++++++++++++++++++++++++++
-  Append a single node to an unsorted node list.
-
-  NodesX *nodesx The set of nodes to modify.
-
-  node_t id The node identifier from the original OSM data.
-
-  double latitude The latitude of the node.
-
-  double longitude The longitude of the node.
-
-  transports_t allow The allowed traffic types through the node.
-
-  nodeflags_t flags The flags to set for this node.
-  ++++++++++++++++++++++++++++++++++++++*/
-
-void AppendNodeList(NodesX *nodesx,node_t id,double latitude,double longitude,transports_t allow,nodeflags_t flags)
-{
- NodeX nodex={0};
-
- nodex.id=id;
- nodex.latitude =radians_to_latlong(latitude);
- nodex.longitude=radians_to_latlong(longitude);
- nodex.allow=allow;
- nodex.flags=flags;
-
- WriteFileBuffered(nodesx->fd,&nodex,sizeof(NodeX));
-
- nodesx->number++;
-
- logassert(nodesx->number<NODE_FAKE,("Too many nodes (change index_t to 64-bits?)"); /* NODE_FAKE marks the high-water mark for real nodes. */
-}
-
-
-/*++++++++++++++++++++++++++++++++++++++
-  Finish appending nodes and change the filename over.
-
-  NodesX *nodesx The nodes that have been appended.
-  ++++++++++++++++++++++++++++++++++++++*/
-
-void FinishNodeList(NodesX *nodesx)
-{
- if(nodesx->fd!=-1)
-    nodesx->fd=CloseFileBuffered(nodesx->fd);
-}
-
-
-/*++++++++++++++++++++++++++++++++++++++
-  Find a particular node index.
-
-  index_t IndexNodeX Returns the index of the extended node with the specified id.
-
-  NodesX *nodesx The set of nodes to use.
-
-  node_t id The node id to look for.
-  ++++++++++++++++++++++++++++++++++++++*/
-
-index_t IndexNodeX(NodesX *nodesx,node_t id)
-{
- index_t start=0;
- index_t end=nodesx->number-1;
- index_t mid;
-
- if(nodesx->number==0)          /* No nodes */
-    return(NO_NODE);
-
- /* Binary search - search key exact match only is required.
-  *
-  *  # <- start  |  Check mid and exit if it matches else move start or end.
-  *  #           |
-  *  #           |  Since an exact match is wanted we can set end=mid-1
-  *  # <- mid    |  or start=mid+1 if we find that mid doesn't match.
-  *  #           |
-  *  #           |  Eventually either end=start or end=start+1 and one of
-  *  # <- end    |  start or end is the wanted one or neither is.
-  */
-
- while((end-start)>1)
-   {
-    mid=start+(end-start)/2;       /* Choose mid point (avoid overflow) */
-
-    if(nodesx->idata[mid]<id)      /* Mid point is too low */
-       start=mid+1;
-    else if(nodesx->idata[mid]>id) /* Mid point is too high */
-       end=mid-1;
-    else                           /* Mid point is correct */
-       return(mid);
-   }
-
- if(nodesx->idata[start]==id)      /* Start is correct */
-    return(start);
-
- if(nodesx->idata[end]==id)        /* End is correct */
-    return(end);
-
- return(NO_NODE);
-}
-
-
-/*++++++++++++++++++++++++++++++++++++++
-  Sort the node list.
-
-  NodesX *nodesx The set of nodes to modify.
-  ++++++++++++++++++++++++++++++++++++++*/
-
-void SortNodeList(NodesX *nodesx)
-{
- int fd;
- index_t xnumber;
-
- /* Print the start message */
-
- printf_first("Sorting Nodes");
-
- /* Re-open the file read-only and a new file writeable */
-
- fd=ReplaceFileBuffered(nodesx->filename_tmp,&nodesx->fd);
-
- /* Open a file for the index */
-
- nodesx->ifd=OpenFileBufferedNew(nodesx->ifilename_tmp);
-
- /* Sort the nodes by ID and index them */
-
- xnumber=nodesx->number;
-
- sortnodesx=nodesx;
-
- nodesx->number=filesort_fixed(nodesx->fd,fd,sizeof(NodeX),NULL,
-                                                           (int (*)(const void*,const void*))sort_by_id,
-                                                           (int (*)(void*,index_t))deduplicate_and_index_by_id);
-
- nodesx->knumber=nodesx->number;
-
- /* Close the files */
-
- nodesx->fd=CloseFileBuffered(nodesx->fd);
- CloseFileBuffered(fd);
-
- nodesx->ifd=CloseFileBuffered(nodesx->ifd);
-
- /* Print the final message */
-
- printf_last("Sorted Nodes: Nodes=%"Pindex_t" Duplicates=%"Pindex_t,xnumber,xnumber-nodesx->number);
-}
-
-
-/*++++++++++++++++++++++++++++++++++++++
-  Sort the nodes into id order.
-
-  int sort_by_id Returns the comparison of the id fields.
-
-  NodeX *a The first extended node.
-
-  NodeX *b The second extended node.
-  ++++++++++++++++++++++++++++++++++++++*/
-
-static int sort_by_id(NodeX *a,NodeX *b)
-{
- node_t a_id=a->id;
- node_t b_id=b->id;
-
- if(a_id<b_id)
-    return(-1);
- else if(a_id>b_id)
-    return(1);
- else
-    return(-FILESORT_PRESERVE_ORDER(a,b)); /* latest version first */
-}
-
-
-/*++++++++++++++++++++++++++++++++++++++
-  Create the index of identifiers and discard duplicate nodes.
-
-  int deduplicate_and_index_by_id Return 1 if the value is to be kept, otherwise 0.
-
-  NodeX *nodex The extended node.
-
-  index_t index The number of sorted nodes that have already been written to the output file.
-  ++++++++++++++++++++++++++++++++++++++*/
-
-static int deduplicate_and_index_by_id(NodeX *nodex,index_t index)
-{
- static node_t previd; /* internal variable (reset by first call in each sort; index==0) */
-
- if(index==0 || nodex->id!=previd)
-   {
-    previd=nodex->id;
-
-    if(nodex->flags&NODE_DELETED)
-       return(0);
-    else
-      {
-       WriteFileBuffered(sortnodesx->ifd,&nodex->id,sizeof(node_t));
-
-       return(1);
-      }
-   }
- else
-    return(0);
-}
-
-
-/*++++++++++++++++++++++++++++++++++++++
-  Remove any nodes that are not part of a highway.
-
-  NodesX *nodesx The set of nodes to modify.
-
-  WaysX *waysx The set of ways to use.
-
-  int keep If set to 1 then keep the old data file otherwise delete it.
-  ++++++++++++++++++++++++++++++++++++++*/
-
-void RemoveNonHighwayNodes(NodesX *nodesx,WaysX *waysx,int keep)
-{
- BitMask *usednode;
- NodeX nodex;
- index_t i,total=0,highway=0,nothighway=0;
- node_t bitmasklength;
- int fd;
-
- /* Print the start message */
-
- printf_first("Checking Ways for unused Nodes: Ways=0 Highway Nodes=0");
-
- /* Re-open the file read-only */
-
- waysx->fd=ReOpenFileBuffered(waysx->filename_tmp);
-
- /* Map the index into memory */
-
- nodesx->idata=MapFile(nodesx->ifilename_tmp);
-
- /* Allocate the node usage bitmask */
-
-#if SLIM
- bitmasklength=nodesx->number;                     /* The number of nodes in the database */
-#else
- bitmasklength=nodesx->idata[nodesx->number-1]+1;  /* One more than the highest OSM node number in the database */
-#endif
-
- usednode=AllocBitMask(bitmasklength);
- log_malloc(usednode,SizeBitMask(bitmasklength));
-
- /* Loop through the ways and mark the used nodes */
-
- for(i=0;i<waysx->number;i++)
-   {
-    WayX wayx;
-    FILESORT_VARINT waysize;
-    node_t node;
-
-    ReadFileBuffered(waysx->fd,&waysize,FILESORT_VARSIZE);
-
-    ReadFileBuffered(waysx->fd,&wayx,sizeof(WayX));
-
-    while(!ReadFileBuffered(waysx->fd,&node,sizeof(node_t)) && node!=NO_NODE_ID)
-      {
-#if SLIM
-       index_t index=IndexNodeX(nodesx,node); /* Index bitmap by node number in the database */
-#else
-       node_t index=node;                     /* Index bitmap by OSM node number */
-#endif
-
-       waysize-=sizeof(node_t);
-
-#if SLIM
-       if(index==NO_NODE)
-          continue;
-#endif
-
-       if(!IsBitSet(usednode,index))
-          highway++;
-
-       SetBit(usednode,index);
-      }
-
-    waysize-=sizeof(node_t)+sizeof(WayX);
-
-    SkipFileBuffered(waysx->fd,waysize);
-
-    if(!((i+1)%1000))
-       printf_middle("Checking Ways for unused Nodes: Ways=%"Pindex_t" Highway Nodes=%"Pindex_t,i+1,highway);
-   }
-
- /* Close the file */
-
- waysx->fd=CloseFileBuffered(waysx->fd);
-
- /* Unmap the index from memory */
-
- nodesx->idata=UnmapFile(nodesx->idata);
-
- /* Print the final message */
-
- printf_last("Checked Ways for unused Nodes: Ways=%"Pindex_t" Highway Nodes=%"Pindex_t,waysx->number,highway);
-
-
- /* Print the start message */
-
- printf_first("Removing unused Nodes: Nodes=0");
-
- /* Open a file for the index */
-
- nodesx->ifd=OpenFileBufferedNew(nodesx->ifilename_tmp);
-
- highway=0;
-
- /* Re-open the file read-only and a new file writeable */
-
- if(keep)
-   {
-    RenameFile(nodesx->filename_tmp,nodesx->filename);
-
-    nodesx->fd=ReOpenFileBuffered(nodesx->filename);
-
-    fd=OpenFileBufferedNew(nodesx->filename_tmp);
-   }
- else
-    fd=ReplaceFileBuffered(nodesx->filename_tmp,&nodesx->fd);
-
- /* Modify the on-disk image */
-
- while(!ReadFileBuffered(nodesx->fd,&nodex,sizeof(NodeX)))
-   {
-#if SLIM
-    index_t node=total;         /* Index by node number in the database */
-#else
-    node_t node=nodex.id;       /* Index by OSM node number */
-#endif
-
-    if(!IsBitSet(usednode,node))
-       nothighway++;
-    else
-      {
-       WriteFileBuffered(fd,&nodex,sizeof(NodeX));
-
-       WriteFileBuffered(nodesx->ifd,&nodex.id,sizeof(node_t));
-
-       highway++;
-      }
-
-    total++;
-
-    if(!(total%10000))
-       printf_middle("Removing unused Nodes: Nodes=%"Pindex_t" Highway=%"Pindex_t" not-Highway=%"Pindex_t,total,highway,nothighway);
-   }
-
- nodesx->number=highway;
-
- /* Close the files */
-
- nodesx->fd=CloseFileBuffered(nodesx->fd);
- CloseFileBuffered(fd);
-
- nodesx->ifd=CloseFileBuffered(nodesx->ifd);
-
- /* Free the now-unneeded index */
-
- log_free(usednode);
- free(usednode);
-
- /* Print the final message */
-
- printf_last("Removed unused Nodes: Nodes=%"Pindex_t" Highway=%"Pindex_t" not-Highway=%"Pindex_t,total,highway,nothighway);
-}
-
-
-/*++++++++++++++++++++++++++++++++++++++
-  Remove any nodes that have been pruned.
-
-  NodesX *nodesx The set of nodes to prune.
-
-  SegmentsX *segmentsx The set of segments to use.
-  ++++++++++++++++++++++++++++++++++++++*/
-
-void RemovePrunedNodes(NodesX *nodesx,SegmentsX *segmentsx)
-{
- NodeX nodex;
- index_t total=0,pruned=0,notpruned=0;
- int fd;
-
- if(nodesx->number==0)
-    return;
-
- /* Print the start message */
-
- printf_first("Deleting Pruned Nodes: Nodes=0 Pruned=0");
-
- /* Allocate the array of indexes */
-
- nodesx->pdata=(index_t*)malloc_logassert(nodesx->number*sizeof(index_t));
- log_malloc(nodesx->pdata,nodesx->number*sizeof(index_t));
-
- /* Re-open the file read-only and a new file writeable */
-
- fd=ReplaceFileBuffered(nodesx->filename_tmp,&nodesx->fd);
-
- /* Modify the on-disk image */
-
- while(!ReadFileBuffered(nodesx->fd,&nodex,sizeof(NodeX)))
-   {
-    if(segmentsx->firstnode[total]==NO_SEGMENT)
-      {
-       pruned++;
-
-       nodesx->pdata[total]=NO_NODE;
-      }
-    else
-      {
-       nodesx->pdata[total]=notpruned;
-
-       WriteFileBuffered(fd,&nodex,sizeof(NodeX));
-
-       notpruned++;
-      }
-
-    total++;
-
-    if(!(total%10000))
-       printf_middle("Deleting Pruned Nodes: Nodes=%"Pindex_t" Pruned=%"Pindex_t,total,pruned);
-   }
-
- nodesx->number=notpruned;
-
- /* Close the files */
-
- nodesx->fd=CloseFileBuffered(nodesx->fd);
- CloseFileBuffered(fd);
-
- /* Free the no-longer required memory */
-
- if(segmentsx->firstnode)
-   {
-    log_free(segmentsx->firstnode);
-    free(segmentsx->firstnode);
-    segmentsx->firstnode=NULL;
-   }
-
- /* Print the final message */
-
- printf_last("Deleted Pruned Nodes: Nodes=%"Pindex_t" Pruned=%"Pindex_t,total,pruned);
-}
-
-
-/*++++++++++++++++++++++++++++++++++++++
-  Sort the node list geographically.
-
-  NodesX *nodesx The set of nodes to modify.
-  ++++++++++++++++++++++++++++++++++++++*/
-
-void SortNodeListGeographically(NodesX *nodesx)
-{
- int fd;
- ll_bin_t lat_min_bin,lat_max_bin,lon_min_bin,lon_max_bin;
-
- if(nodesx->number==0)
-    return;
-
- /* Print the start message */
-
- printf_first("Sorting Nodes Geographically");
-
- /* Work out the range of data */
-
- lat_min=radians_to_latlong( 2);
- lat_max=radians_to_latlong(-2);
- lon_min=radians_to_latlong( 4);
- lon_max=radians_to_latlong(-4);
-
- /* Allocate the memory for the geographical index array */
-
- nodesx->gdata=(index_t*)malloc_logassert(nodesx->number*sizeof(index_t));
- log_malloc(nodesx->gdata,nodesx->number*sizeof(index_t));
-
- /* Re-open the file read-only and a new file writeable */
-
- fd=ReplaceFileBuffered(nodesx->filename_tmp,&nodesx->fd);
-
- /* Sort nodes geographically and index them */
-
- sortnodesx=nodesx;
-
- filesort_fixed(nodesx->fd,fd,sizeof(NodeX),(int (*)(void*,index_t))update_id,
-                                            (int (*)(const void*,const void*))sort_by_lat_long,
-                                            (int (*)(void*,index_t))index_by_lat_long);
-
- /* Close the files */
-
- nodesx->fd=CloseFileBuffered(nodesx->fd);
- CloseFileBuffered(fd);
-
- /* Work out the number of bins */
-
- if(nodesx->super)
-   {
-    lat_min_bin=latlong_to_bin(lat_min);
-    lon_min_bin=latlong_to_bin(lon_min);
-    lat_max_bin=latlong_to_bin(lat_max);
-    lon_max_bin=latlong_to_bin(lon_max);
-
-    nodesx->latzero=lat_min_bin;
-    nodesx->lonzero=lon_min_bin;
-
-    nodesx->latbins=(lat_max_bin-lat_min_bin)+1;
-    nodesx->lonbins=(lon_max_bin-lon_min_bin)+1;
-   }
-
- /* Free the memory */
-
- if(nodesx->super)
-   {
-    log_free(nodesx->super);
-    free(nodesx->super);
-    nodesx->super=NULL;
-   }
-
- /* Print the final message */
-
- printf_last("Sorted Nodes Geographically: Nodes=%"Pindex_t,nodesx->number);
-}
-
-
-/*++++++++++++++++++++++++++++++++++++++
-  Update the node ids.
-
-  int update_id Return 1 if the value is to be kept, otherwise 0.
-
-  NodeX *nodex The extended node.
-
-  index_t index The number of unsorted nodes that have been read from the input file.
-  ++++++++++++++++++++++++++++++++++++++*/
-
-static int update_id(NodeX *nodex,index_t index)
-{
- nodex->id=index;
-
- if(sortnodesx->super && IsBitSet(sortnodesx->super,index))
-    nodex->flags|=NODE_SUPER;
-
- return(1);
-}
-
-
-/*++++++++++++++++++++++++++++++++++++++
-  Sort the nodes into latitude and longitude order (first by longitude bin
-  number, then by latitude bin number and then by exact longitude and then by
-  exact latitude).
-
-  int sort_by_lat_long Returns the comparison of the latitude and longitude fields.
-
-  NodeX *a The first extended node.
-
-  NodeX *b The second extended node.
-  ++++++++++++++++++++++++++++++++++++++*/
-
-static int sort_by_lat_long(NodeX *a,NodeX *b)
-{
- ll_bin_t a_lon=latlong_to_bin(a->longitude);
- ll_bin_t b_lon=latlong_to_bin(b->longitude);
-
- if(a_lon<b_lon)
-    return(-1);
- else if(a_lon>b_lon)
-    return(1);
- else
-   {
-    ll_bin_t a_lat=latlong_to_bin(a->latitude);
-    ll_bin_t b_lat=latlong_to_bin(b->latitude);
-
-    if(a_lat<b_lat)
-       return(-1);
-    else if(a_lat>b_lat)
-       return(1);
-    else
-      {
-       if(a->longitude<b->longitude)
-          return(-1);
-       else if(a->longitude>b->longitude)
-          return(1);
-       else
-         {
-          if(a->latitude<b->latitude)
-             return(-1);
-          else if(a->latitude>b->latitude)
-             return(1);
-         }
-
-       return(FILESORT_PRESERVE_ORDER(a,b));
-      }
-   }
-}
-
-
-/*++++++++++++++++++++++++++++++++++++++
-  Create the index between the sorted and unsorted nodes.
-
-  int index_by_lat_long Return 1 if the value is to be kept, otherwise 0.
-
-  NodeX *nodex The extended node.
-
-  index_t index The number of sorted nodes that have already been written to the output file.
-  ++++++++++++++++++++++++++++++++++++++*/
-
-static int index_by_lat_long(NodeX *nodex,index_t index)
-{
- sortnodesx->gdata[nodex->id]=index;
-
- if(sortnodesx->super)
-   {
-    if(nodex->latitude<lat_min)
-       lat_min=nodex->latitude;
-    if(nodex->latitude>lat_max)
-       lat_max=nodex->latitude;
-    if(nodex->longitude<lon_min)
-       lon_min=nodex->longitude;
-    if(nodex->longitude>lon_max)
-       lon_max=nodex->longitude;
-   }
-
- return(1);
-}
-
-
-/*++++++++++++++++++++++++++++++++++++++
-  Save the final node list database to a file.
-
-  NodesX *nodesx The set of nodes to save.
-
-  const char *filename The name of the file to save.
-
-  SegmentsX *segmentsx The set of segments to use.
-  ++++++++++++++++++++++++++++++++++++++*/
-
-void SaveNodeList(NodesX *nodesx,const char *filename,SegmentsX *segmentsx)
-{
- index_t i;
- int fd;
- NodesFile nodesfile={0};
- index_t super_number=0;
- ll_bin2_t latlonbin=0,maxlatlonbins;
- index_t *offsets;
-
- /* Print the start message */
-
- printf_first("Writing Nodes: Nodes=0");
-
- /* Allocate the memory for the geographical offsets array */
-
- offsets=(index_t*)malloc_logassert((nodesx->latbins*nodesx->lonbins+1)*sizeof(index_t));
-
- latlonbin=0;
-
- /* Re-open the file */
-
- nodesx->fd=ReOpenFileBuffered(nodesx->filename_tmp);
-
- /* Write out the nodes data */
-
- fd=OpenFileBufferedNew(filename);
-
- SeekFileBuffered(fd,sizeof(NodesFile)+(nodesx->latbins*nodesx->lonbins+1)*sizeof(index_t));
-
- for(i=0;i<nodesx->number;i++)
-   {
-    NodeX nodex;
-    Node node={0};
-    ll_bin_t latbin,lonbin;
-    ll_bin2_t llbin;
-
-    ReadFileBuffered(nodesx->fd,&nodex,sizeof(NodeX));
-
-    /* Create the Node */
-
-    node.latoffset=latlong_to_off(nodex.latitude);
-    node.lonoffset=latlong_to_off(nodex.longitude);
-    node.firstseg=segmentsx->firstnode[i];
-    node.allow=nodex.allow;
-    node.flags=nodex.flags;
-
-    if(node.flags&NODE_SUPER)
-       super_number++;
-
-    /* Work out the offsets */
-
-    latbin=latlong_to_bin(nodex.latitude )-nodesx->latzero;
-    lonbin=latlong_to_bin(nodex.longitude)-nodesx->lonzero;
-    llbin=lonbin*nodesx->latbins+latbin;
-
-    for(;latlonbin<=llbin;latlonbin++)
-       offsets[latlonbin]=i;
-
-    /* Write the data */
-
-    WriteFileBuffered(fd,&node,sizeof(Node));
-
-    if(!((i+1)%10000))
-       printf_middle("Writing Nodes: Nodes=%"Pindex_t,i+1);
-   }
-
- /* Close the file */
-
- nodesx->fd=CloseFileBuffered(nodesx->fd);
-
- /* Finish off the offset indexing and write them out */
-
- maxlatlonbins=nodesx->latbins*nodesx->lonbins;
-
- for(;latlonbin<=maxlatlonbins;latlonbin++)
-    offsets[latlonbin]=nodesx->number;
-
- SeekFileBuffered(fd,sizeof(NodesFile));
- WriteFileBuffered(fd,offsets,(nodesx->latbins*nodesx->lonbins+1)*sizeof(index_t));
-
- free(offsets);
-
- /* Write out the header structure */
-
- nodesfile.number=nodesx->number;
- nodesfile.snumber=super_number;
-
- nodesfile.latbins=nodesx->latbins;
- nodesfile.lonbins=nodesx->lonbins;
-
- nodesfile.latzero=nodesx->latzero;
- nodesfile.lonzero=nodesx->lonzero;
-
- SeekFileBuffered(fd,0);
- WriteFileBuffered(fd,&nodesfile,sizeof(NodesFile));
-
- CloseFileBuffered(fd);
-
- /* Free the memory in the segments */
-
- log_free(segmentsx->firstnode);
- free(segmentsx->firstnode);
- segmentsx->firstnode=NULL;
-
- /* Print the final message */
-
- printf_last("Wrote Nodes: Nodes=%"Pindex_t,nodesx->number);
-}



View it on GitLab: https://salsa.debian.org/debian-gis-team/routino/-/commit/2176d367cf6323d611fa93286ff605fb5e9efe03

-- 
View it on GitLab: https://salsa.debian.org/debian-gis-team/routino/-/commit/2176d367cf6323d611fa93286ff605fb5e9efe03
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/20251203/03a2ced4/attachment-0001.htm>


More information about the Pkg-grass-devel mailing list