rename.c 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /**
  2. * \file rename.c
  3. *
  4. * \brief GIS Library - Rename file functions.
  5. *
  6. * (C) 2001-2008 by the GRASS Development Team
  7. *
  8. * This program is free software under the GNU General Public License
  9. * (>=v2). Read the file COPYING that comes with GRASS for details.
  10. *
  11. * \author GRASS GIS Development Team
  12. *
  13. * \date 1999-2006
  14. */
  15. #include <stdio.h>
  16. #include <stdlib.h>
  17. #include <string.h>
  18. #include <unistd.h>
  19. #include <grass/gis.h>
  20. /**
  21. **\brief Rename a file in the filesystem.
  22. **
  23. **The file or directory <b>oldname</b> is renamed to <b>newname</b>.<br>
  24. **
  25. ** \param[in] oldname
  26. ** \param[in] newname
  27. ** \return 0 if successful
  28. ** \return -1 on error
  29. **/
  30. int G_rename_file(const char *oldname, const char *newname)
  31. {
  32. #ifdef __MINGW32__
  33. remove(newname);
  34. #endif
  35. return rename(oldname, newname);
  36. }
  37. /**
  38. * \brief Rename a database file.
  39. *
  40. * The file or directory <b>oldname</b> under the database <b>element</b>
  41. * directory in the current mapset is renamed to <b>newname</b>.<br>
  42. *
  43. * <b>Bug:</b> This routine does not check to see if the <b>newname</b>
  44. * name is a valid database file name.
  45. *
  46. * \param[in] element
  47. * \param[in] oldname
  48. * \param[in] newname
  49. * \return 0 if <b>oldname</b> does not exist
  50. * \return 1 if successful
  51. * \return -1 on error
  52. */
  53. int G_rename(const char *element, const char *oldname, const char *newname)
  54. {
  55. const char *mapset;
  56. char xname[GNAME_MAX], xmapset[GMAPSET_MAX];
  57. char from[512], to[512];
  58. /* name in mapset legal only if mapset is current mapset */
  59. mapset = G_mapset();
  60. if (G__name_is_fully_qualified(oldname, xname, xmapset)
  61. && strcmp(mapset, xmapset))
  62. return -1;
  63. if (G__name_is_fully_qualified(newname, xname, xmapset)
  64. && strcmp(mapset, xmapset))
  65. return -1;
  66. /* if file does not exist return 0 */
  67. if (access(G__file_name(from, element, oldname, mapset), 0) != 0)
  68. return 0;
  69. G__file_name(to, element, newname, mapset);
  70. /* return result of rename */
  71. return G_rename_file(from, to) == 0 ? 1 : -1;
  72. }