[GRASS-windows] r.terraflow

Helena Mitasova hmitaso at unity.ncsu.edu
Thu Nov 6 00:18:26 EST 2008


has anybody tried to run r.terraflow in winGRASS?

It cannot find or create  the temp file?
ami_single_temp_name: mkstemp failed : No such file or directory
assertion failed: 0 file ami_stream.cc line 54
is it trying to write into /var/tmp which does not exist in windows?

thanks,

Helena



On Sep 13, 2008, at 4:37 AM, Markus Neteler wrote:

> On Sat, Sep 13, 2008 at 2:18 AM, Glynn Clements
> <glynn at gclements.plus.com> wrote:
>>
>> Markus Neteler wrote:
>>
>>>> thanks for testing - I think simwe has a problem on MSwindows  
>>>> due to
>>>> the problem with sites to vector update - that is why Glynn has  
>>>> disabled
>>>> it.
>>>
>>> when was it disabled (don't remember)? Post-6.3.?
>>
>> Only in 7.x.
>>
>> The compatibility wrappers use a "FILE *" in their interfaces, which
>> is cast to/from a "struct Map_info *" internally. In 7.x, I changed
>> this to use the correct type, and changed any code which uses those
>> functions.
>
> This had been backported to 6.4.svn.
>
>> Except that simwe has some mismatches, e.g. using G_sites_close()  
>> on a
>> normal text file and using fclose() on a "pseudo-FILE*". With the
>> changes to lib/sites, simwe doesn't compile, and I couldn't  
>> understand
>> the code well enough to fix it, so I disabled it.
>
> I have now backported small fixes (essentially code order to do some
> computations post-parser instead of ante-parser. But that's not
> relevant.
>
> I have now compared simwe/ in 6.3.svn (after updating the code
> layout there to the new rules) to 6.4.svn. Besides above mentioned
> core-reorder, the only difference is:
>
> diff -ru --exclude=.svn
> /home/neteler/grass63_release/raster/simwe/simlib/output.c
> simwe/simlib/output.c
> --- /home/neteler/grass63_release/raster/simwe/simlib/output.c	 
> 2008-09-13
> 10:28:51.000000000 +0200
> +++ simwe/simlib/output.c	2008-08-05 00:05:02.000000000 +0200
> @@ -57,6 +57,8 @@
>  	if (fdoutwalk == NULL)
>  	    G_fatal_error("Cannot open %s", outwalk);
>  	else {
> +	    char buf[GNAME_MAX + 40];
> +
>  	    if (NULL == (sd = G_site_new_struct(-1, 2, 0, 1)))
>  		G_fatal_error("memory allocation failed for site");
>
> @@ -65,9 +67,8 @@
>  	    else
>  		walkershead.name = outwalk;
>
> -	    walkershead.desc = G_strdup("output walkers");
> -	    walkershead.desc = (char *)G_malloc(128 * sizeof(char));
> -	    sprintf(walkershead.desc, "output walkers of %s [raster]",  
> depth);
> +	    sprintf(buf, "output walkers of %s [raster]", depth);
> +	    walkershead.desc = G_store(buf);
>  	    walkershead.time = NULL;
>  	    walkershead.stime = NULL;
>  	    walkershead.labels = NULL;
>
> Could this missing update in 6.3.svn cause a crash on Windows?
>
> A real candidate is the update to lib/sites/sites.c which isn't in  
> GRASS 6.3.svn
> yet:
>
> --- /home/neteler/grass63_release/lib/sites/sites.c	2008-09-13
> 10:34:16.000000000 +0200
> +++ ../lib/sites/sites.c	2008-08-05 00:05:18.000000000 +0200
> @@ -50,16 +50,13 @@
>   *                      -2 on other fatal error or insufficient data,
>   *                       1 on format mismatch (extra data)
>   */
> -int G_site_get(FILE * fptr, Site * s)
> +int G_site_get(struct Map_info *Map, Site * s)
>  {
>      int i, type, cat;
> -    struct Map_info *Map;
>      static struct line_pnts *Points = NULL;
>      static struct line_cats *Cats = NULL;
>      SITE_ATT *sa;
>
> -    Map = (struct Map_info *)fptr;
> -
>      if (Points == NULL)
>  	Points = Vect_new_line_struct();
>      if (Cats == NULL)
> @@ -115,14 +112,11 @@
>
>
>  /* Writes a site to file open on fptr. */
> -int G_site_put(FILE * fptr, const Site * s)
> +int G_site_put(struct Map_info *Map, const Site * s)
>  {
> -    struct Map_info *Map;
>      static struct line_pnts *Points = NULL;
>      static struct line_cats *Cats = NULL;
>
> -    Map = (struct Map_info *)fptr;
> -
>      if (Points == NULL)
>  	Points = Vect_new_line_struct();
>      if (Cats == NULL)
> @@ -156,12 +150,9 @@
>   *                      -1 on EOF,
>   *                      -2 for other error.
>   */
> -int G_site_describe(FILE * ptr, int *dims, int *cat, int *strs,  
> int *dbls)
> +int G_site_describe(struct Map_info *Map, int *dims, int *cat, int  
> *strs,
> +		    int *dbls)
>  {
> -    struct Map_info *Map;
> -
> -    Map = (struct Map_info *)ptr;
> -
>      if (Vect_is_3d(Map)) {
>  	G_debug(1, "Vector is 3D -> number of site dimensions is 3");
>  	*dims = 3;
> @@ -184,13 +175,10 @@
>  /*-
>   * Writes site_head struct.
>   */
> -int G_site_put_head(FILE * ptr, Site_head * head)
> +int G_site_put_head(struct Map_info *Map, Site_head * head)
>  {
> -    struct Map_info *Map;
>      static char buf[128];
>
> -    Map = (struct Map_info *)ptr;
> -
>      if (head->name != NULL)
>  	Vect_set_map_name(Map, head->name);
>
> @@ -223,7 +211,8 @@
>  		    return -1;	/* added to prevent crash 5/2000 MN */
>  		}
>  	    }
> -	    G_format_timestamp(head->time, head->stime);
> +	    G_format_timestamp(head->time, buf);
> +	    head->stime = G_store(buf);
>  	    Vect_set_date(Map, head->stime);
>  	}
>      }
> @@ -234,12 +223,8 @@
>  /*-
>   * Fills in site_head struct.
>   */
> -int G_site_get_head(FILE * ptr, Site_head * head)
> +int G_site_get_head(struct Map_info *Map, Site_head * head)
>  {
> -    struct Map_info *Map;
> -
> -    Map = (struct Map_info *)ptr;
> -
>      head->name = Vect_get_name(Map);
>      head->desc = Vect_get_comment(Map);
>      head->form = NULL;
> @@ -293,11 +278,11 @@
>   *      rejects all names that begin with .
>    
> **********************************************************************
>   *
> - *  FILE *
> + *  struct Map_info *
>   *  G_sites_open_old (name, mapset)
>   *      opens the existing site list file 'name' in the 'mapset'
>   *
> - *  FILE *
> + *  struct Map_info *
>   *  G_sites_open_new (name)
>   *      opens a new site list file 'name' in the current mapset
>   *
> @@ -343,7 +328,7 @@
>  }
>
>
> -FILE *G_sites_open_old(char *name, char *mapset)
> +struct Map_info *G_sites_open_old(const char *name, const char  
> *mapset)
>  {
>      struct Map_info *Map;
>      struct field_info *fi;
> @@ -376,7 +361,7 @@
>      fi = Vect_get_field(Map, 1);
>      if (fi == NULL) {		/* not attribute table */
>  	G_debug(1, "No attribute table");
> -	return (FILE *) Map;
> +	return Map;
>      }
>
>      driver = db_start_driver_open_database(fi->driver, fi->database);
> @@ -476,11 +461,11 @@
>      qsort((void *)Map->site_att, Map->n_site_att, sizeof(SITE_ATT),
>  	  site_att_cmp);
>
> -    return (FILE *) Map;
> +    return Map;
>  }
>
>
> -FILE *G_sites_open_new(char *name)
> +struct Map_info *G_sites_open_new(const char *name)
>  {
>      struct Map_info *Map;
>
> @@ -494,16 +479,13 @@
>
>      G_debug(1, "New vector map opened");
>
> -    return (FILE *) Map;
> +    return Map;
>  }
>
>
> -void G_sites_close(FILE * ptr)
> +void G_sites_close(struct Map_info *Map)
>  {
>      int i, j;
> -    struct Map_info *Map;
> -
> -    Map = (struct Map_info *)ptr;
>
>      if (Map->mode == GV_MODE_WRITE || Map->mode == GV_MODE_RW)
>  	Vect_build(Map, stderr);
> @@ -530,19 +512,19 @@
>  /* compatability while porting applications  */
>
>  /*********************************************/
> -FILE *G_fopen_sites_old(char *name, char *mapset)
> +struct Map_info *G_fopen_sites_old(const char *name, const char  
> *mapset)
>  {
>      return G_sites_open_old(name, mapset);
>  }
>
>
> -FILE *G_fopen_sites_new(char *name)
> +struct Map_info *G_fopen_sites_new(const char *name)
>  {
>      return G_sites_open_new(name);
>  }
>
>
> -int G_get_site(FILE * fd, double *east, double *north, char **desc)
> +int G_get_site(struct Map_info *fd, double *east, double *north,  
> char **desc)
>  {
>      /* TODO ? */
>      G_fatal_error("G_get_site() not yet updated.");
> @@ -551,7 +533,8 @@
>  }
>
>
> -int G_put_site(FILE * fd, double east, double north, const char  
> *desc)
> +int G_put_site(struct Map_info *fd, double east, double north,
> +	       const char *desc)
>  {
>      /* TODO ? */
>      G_fatal_error("G_put_site() not yet updated.");
> @@ -1209,20 +1192,13 @@
>
>     Functions to obtain fields in order to draw sites with each  
> point having a
>     geometric property depending from database values.
> -
> -   IN ALL THESE FUNCTIONS I FOLLOW THE CONVENTION TO PASS  
> Map_info* as FILE*
> -   FOR COHERENCE WITH OTHER ALREADY WRITTEN FUNCTION IN sites.c FILE.
>   */
>
>  /*
>     Returns a pointer to the SITE_ATT in Map_info *ptr and with  
> category cat
>   */
> -SITE_ATT *G_sites_get_atts(FILE * ptr, int *cat)
> +SITE_ATT *G_sites_get_atts(struct Map_info * Map, int *cat)
>  {
> -    struct Map_info *Map;
> -
> -    Map = (struct Map_info *)ptr;
> -
>      return (SITE_ATT *) bsearch((void *)cat, (void *)Map->site_att,
>  				Map->n_site_att, sizeof(SITE_ATT),
>  				site_att_cmp);
> @@ -1233,13 +1209,13 @@
>
>     WARNING: user is responsible to free allocated memory, directly or
> calling G_sites_free_fields()
>   */
> -int G_sites_get_fields(FILE * ptr, char ***cnames, int **ctypes,  
> int **ndx)
> +int G_sites_get_fields(struct Map_info *Map, char ***cnames, int  
> **ctypes,
> +		       int **ndx)
>  {
> -    struct Map_info *Map;
>      struct field_info *fi;
>      int nrows, row, ncols, col, ndbl, nstr, ctype;
>
> -    char *name;
> +    const char *name;
>      dbDriver *driver;
>      dbString stmt;
>      dbCursor cursor;
> @@ -1254,7 +1230,6 @@
>         Should it be not true in the future, maybe we'll have to
> change this by choosing
>         appropriate fields and multiple categories */
>
> -    Map = (struct Map_info *)ptr;
>      fi = (struct field_info *)Vect_get_field(Map, 1);
>
> On the other hand, fixing 6.3.svn is a waste of time since we'll
> branch of a release branch for 6.4.svn soon. Then release
> candidates will be created and hopefully a new WinGRASS package.
>
>> [It doesn't help that there are various other problems with the code,
>> e.g. each module having a private copy of waterglobs.h which doesn't
>> necessarily match simlib.]
>
> Markus



More information about the grass-windows mailing list