[GRASS5] [bug #3586] (grass) r.proj error: closecell: can't move file

Glynn Clements glynn at gclements.plus.com
Sun Aug 28 19:47:03 EDT 2005


Morten Hulden wrote:

> Request Tracker wrote:
> > this bug's URL: http://intevation.de/rt/webrt?serial_num=3586
> > -------------------------------------------------------------------------
> > 
> > Subject: r.proj error: closecell: can't move file
> > 
> > Platform: GNU/Linux/i386
> > grass obtained from: Trento Italy site
> > grass binary for platform: Compiled from Sources
> > GRASS Version: 6.0.1
> > 
> > When using r.proj for larger files (cca 300MB+), r.proj ends with this error:
> > 
> > Allocating memory and reading input map...  100%
> > Projecting...  100%
> > WARNING: closecell: can't move
> >          /home/fordfrog/data/mapy/cr-jtsk/PERMANENT/.tmp/centaur/11061.1
> >          to null file
> >          /home/fordfrog/data/mapy/cr-jtsk/PERMANENT/cell_misc/landsat_rgb_composite/null
> > WARNING: closecell: can't move
> >          /home/fordfrog/data/mapy/cr-jtsk/PERMANENT/.tmp/centaur/11061.0
> >          to cell file
> >          /home/fordfrog/data/mapy/cr-jtsk/PERMANENT/cell/landsat_rgb_composite
> > WARNING: unable to find [landsat_rgb_composite] in [PERMANENT]
> > WARNING: can't write range file for [landsat_rgb_composite in PERMANENT]
> > WARNING: unable to find [landsat_rgb_composite] in [PERMANENT]
> > 
> > Each time I move the files manually (mv <source> <dest>) and they seem to be OK. The filesystem is vfat.
> 
> 
> Except that I can't see why this would happen only for large files I 
> think the problem is because a Linux Grass version is run with data 
> files on a vfat file system. We do not check file system types at run 
> time, only platform at compile time. So something, using link() instead 
> of CopyFile(), is breaking ?.
> 
> If so, not only r.proj is affected.
> 
> 
>  From closecell.c:
> 
> #ifdef __MINGW32__
>              if ( CopyFile ( FCB.null_temp_name, path, FALSE ) == 0 ) {
> #else
>              if(link (FCB.null_temp_name, path) < 0) {
> #endif
>                  sprintf(command, "mv %s %s", FCB.null_temp_name, path);
>                  if(system(command)) {
>                      sprintf(buf,"closecell: can't move %s\nto null file 
> %s",
>                      FCB.null_temp_name, path);
>                      G_warning (buf);
>                      stat = -1;
>                  }
>              } else {
>                  remove ( FCB.null_temp_name );
>              }
>          } else {
>              remove ( FCB.null_temp_name );
>              remove ( path );
>          } /* null_cur_row > 0 */

This should be using rename() rather than link()+remove(). And the use
of system("mv ....") should be removed.

-- 
Glynn Clements <glynn at gclements.plus.com>




More information about the grass-dev mailing list