filename.c
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:2k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * filename.c
  4.  *
  5.  *
  6.  * Copyright (c) 1994, Regents of the University of California
  7.  *
  8.  *
  9.  * IDENTIFICATION
  10.  *   $Header: /usr/local/cvsroot/pgsql/src/backend/utils/adt/filename.c,v 1.17.2.1 1999/08/02 05:24:52 scrappy Exp $
  11.  *
  12.  *-------------------------------------------------------------------------
  13.  */
  14. #include <pwd.h>
  15. #include <sys/param.h>
  16. #include "postgres.h"
  17. #include "miscadmin.h"
  18. #include "utils/builtins.h"
  19. char *
  20. filename_in(char *file)
  21. {
  22. char    *str;
  23. int ind = 0;
  24. /*
  25.  * XXX - HACK CITY --- REDO should let the shell do expansions
  26.  * (shexpand)
  27.  */
  28. str = (char *) palloc(MAXPATHLEN * sizeof(*str));
  29. str[0] = '';
  30. if (file[0] == '~')
  31. {
  32. if (file[1] == '' || file[1] == '/')
  33. {
  34. /* Home directory */
  35. char    *userName;
  36. struct passwd *pw;
  37. userName = GetPgUserName();
  38. if ((pw = getpwnam(userName)) == NULL)
  39. {
  40. elog(ERROR, "User %s is not a Unix user on the db server.",
  41.  userName);
  42. }
  43. strcpy(str, pw->pw_dir);
  44. ind = 1;
  45. }
  46. else
  47. {
  48. /* Someone else's directory */
  49. char name[17],
  50.    *p;
  51. struct passwd *pw;
  52. int len;
  53. if ((p = (char *) strchr(file, '/')) == NULL)
  54. {
  55. strcpy(name, file + 1);
  56. len = strlen(name);
  57. }
  58. else
  59. {
  60. len = (p - file) - 1;
  61. StrNCpy(name, file + 1, len + 1);
  62. }
  63. /* printf("name: %sn"); */
  64. if ((pw = getpwnam(name)) == NULL)
  65. {
  66. elog(ERROR, "No such user: %sn", name);
  67. ind = 0;
  68. }
  69. else
  70. {
  71. strcpy(str, pw->pw_dir);
  72. ind = len + 1;
  73. }
  74. }
  75. }
  76. else if (file[0] == '$')
  77. { /* $POSTGRESHOME, etc. expand it. */
  78. char environment[80],
  79.    *envirp,
  80.    *p;
  81. int len;
  82. if ((p = (char *) strchr(file, '/')) == NULL)
  83. {
  84. strcpy(environment, file + 1);
  85. len = strlen(environment);
  86. }
  87. else
  88. {
  89. len = (p - file) - 1;
  90. StrNCpy(environment, file + 1, len + 1);
  91. }
  92. envirp = getenv(environment);
  93. if (envirp)
  94. {
  95. strcpy(str, envirp);
  96. ind = len + 1;
  97. }
  98. else
  99. elog(ERROR, "Couldn't find %s in your environment", environment);
  100. }
  101. else
  102. ind = 0;
  103. strcat(str, file + ind);
  104. return str;
  105. }
  106. char *
  107. filename_out(char *s)
  108. {
  109. char    *ret;
  110. if (!s)
  111. return (char *) NULL;
  112. ret = (char *) palloc(strlen(s) + 1);
  113. if (!ret)
  114. elog(ERROR, "filename_out: palloc failed");
  115. return strcpy(ret, s);
  116. }