[GRASS5] A GRASS user configuration directory...

Eric G. Miller egm2 at jps.net
Fri Feb 23 21:02:13 EST 2001

On Fri, Feb 23, 2001 at 06:56:51PM +0700, Justin Hickey wrote:
> Hi Eric
> "Eric G. Miller" wrote:
> > 
> > I've done a bit of the work to handle a user's configuration directory
> > in $HOME/.grass.  I don't know if this is something we want to mess 
> > with now, or wait until later.  Basically, I have one callable
> > function so far: G_rc_path(char *elems, char *item).  It works similar
> > to the G_element() types of functions, but it does several things.
> I'm not familiar with G_element(). Could you please provide a brief
> overview of how G_rc_path() works? Maybe with an example?

Well, there really isn't a G_element() function, I was kind of
generalizing the concept of mapset elements used in various open/find
type routines.  There is the G__make_mapset_element()...

Anyway, for a short example.  Say I wanted to get the path for the x0
socket file, that lives or will live in $HOME/.grass/com.  I'd just
do something like:

  char *path;
  path = G_rc_path ("com", "x0");

If $HOME/.grass  didn't exist, it would be created.
If $HOME/.grass/com didn't exist, it would be created.
No test for existence is done for the file (since it's not known if it
will be a new file or what).

I've already tested it out here with the XDRIVER (using sockets
obviously) and it works.  A similar approach could be done for temporary
files by having G_tempfile() do something like:

char * 
  int i, status;
  pid_t pid;
  char *path, name[30];
  struct stat buf;

  pid = getpid();
  i = 0;
  path = NULL;
  do {
    snprintf (name, 30, "%d.%d", pid, i);
    G_free (path);
    path = G_rc_path ("tmp", name); /* should check for NULL return */
    status = lstat (path, &buf);  
  } while (status == 0); /* file exists... */
  return path;
At some point, it would return a path like $HOME/.grass/tmp/12345.7

All in all, it's pretty simple.  Most the code I wrote for this spends
time doing sanity testing on input and making directories as needed.

Eric G. Miller <egm2 at jps.net>

If you want to unsubscribe from GRASS Development Team mailing list write to:
minordomo at geog.uni-hannover.de with
subject 'unsubscribe grass5'

More information about the grass-dev mailing list