mke_mapset.c 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <sys/types.h>
  5. #include <sys/stat.h>
  6. #include <fcntl.h>
  7. #include <unistd.h>
  8. #include <errno.h>
  9. extern int errno;
  10. #include <grass/gis.h>
  11. int make_mapset (const char *location, const char *mapset)
  12. {
  13. char buffer[GPATH_MAX] ;
  14. char *buffer2;
  15. FILE *fd ;
  16. struct Cell_head window;
  17. /* create the mapset directory */
  18. sprintf(buffer,"%s/%s",location, mapset) ;
  19. G_mkdir(buffer) ;
  20. /* give the mapset a default window for the entire location */
  21. G_get_default_window(&window);
  22. G_put_window(&window);
  23. /* generate DB settings file in new mapset */
  24. G_asprintf(&buffer2,"%s/%s/VAR", location, mapset);
  25. if((fd=fopen(buffer2,"w"))==NULL){
  26. perror("fopen");
  27. G_fatal_error("Cannot create <%s> file in new mapset", buffer2);
  28. }
  29. /* Use DB_DEFAULT_DRIVER from <grass/dbmi.h> instead of hardcoding? */
  30. fprintf (fd, "DB_DRIVER: sqlite\n");
  31. fprintf (fd, "DB_DATABASE: $GISDBASE/$LOCATION_NAME/$MAPSET/sqlite.db\n");
  32. fclose (fd);
  33. G_free(buffer2);
  34. #ifdef KEEP_IF_DB_PER_MAP
  35. /* create similar dir structure for SQLite if a db file is to be
  36. created for every vector map instead of one DB per mapset */
  37. if(strcmp(DB_DEFAULT_DRIVER, "dbf") == 0 ) {
  38. /* Make the dbf/ subdirectory */
  39. sprintf( buffer, "%s/%s/dbf", location, mapset );
  40. if( G_mkdir( buffer ) != 0 )
  41. return -1;
  42. }
  43. #endif
  44. return(0) ;
  45. }