sysstr.c
上传用户:ig0539
上传日期:2022-05-21
资源大小:181k
文件大小:4k
源码类别:

Ftp客户端

开发平台:

C/C++

  1. /*
  2.  * Part of Very Secure FTPd
  3.  * Licence: GPL v2
  4.  * Author: Chris Evans
  5.  * sysstr.c
  6.  *
  7.  * This file basically wraps system functions so that we can deal in our
  8.  * nice abstracted string buffer objects.
  9.  */
  10. #include "sysstr.h"
  11. #include "str.h"
  12. #include "secbuf.h"
  13. #include "sysutil.h"
  14. #include "defs.h"
  15. #include "utility.h"
  16. #include "tunables.h"
  17. void
  18. str_getcwd(struct mystr* p_str)
  19. {
  20.   static char* p_getcwd_buf;
  21.   char* p_ret;
  22.   if (p_getcwd_buf == 0)
  23.   {
  24.     vsf_secbuf_alloc(&p_getcwd_buf, VSFTP_PATH_MAX);
  25.   }
  26.   /* In case getcwd() fails */
  27.   str_empty(p_str);
  28.   p_ret = vsf_sysutil_getcwd(p_getcwd_buf, VSFTP_PATH_MAX);
  29.   if (p_ret != 0)
  30.   {
  31.     str_alloc_text(p_str, p_getcwd_buf);
  32.   }
  33. }
  34. int
  35. str_write_loop(const struct mystr* p_str, const int fd)
  36. {
  37.   return vsf_sysutil_write_loop(fd, str_getbuf(p_str), str_getlen(p_str));
  38. }
  39. int
  40. str_read_loop(struct mystr* p_str, const int fd)
  41. {
  42.   return vsf_sysutil_read_loop(
  43.     fd, (char*) str_getbuf(p_str), str_getlen(p_str));
  44. }
  45. int
  46. str_mkdir(const struct mystr* p_str, const unsigned int mode)
  47. {
  48.   return vsf_sysutil_mkdir(str_getbuf(p_str), mode);
  49. }
  50. int
  51. str_rmdir(const struct mystr* p_str)
  52. {
  53.   return vsf_sysutil_rmdir(str_getbuf(p_str));
  54. }
  55. int
  56. str_unlink(const struct mystr* p_str)
  57. {
  58.   return vsf_sysutil_unlink(str_getbuf(p_str));
  59. }
  60. int
  61. str_chdir(const struct mystr* p_str)
  62. {
  63.   return vsf_sysutil_chdir(str_getbuf(p_str));
  64. }
  65. int
  66. str_open(const struct mystr* p_str, const enum EVSFSysStrOpenMode mode)
  67. {
  68.   enum EVSFSysUtilOpenMode open_mode = kVSFSysStrOpenUnknown;
  69.   switch (mode)
  70.   {
  71.     case kVSFSysStrOpenReadOnly:
  72.       open_mode = kVSFSysUtilOpenReadOnly;
  73.       break;
  74.     default:
  75.       bug("unknown mode value in str_open");
  76.       break;
  77.   }
  78.   return vsf_sysutil_open_file(str_getbuf(p_str), open_mode);
  79. }
  80. int
  81. str_stat(const struct mystr* p_str, struct vsf_sysutil_statbuf** p_ptr)
  82. {
  83.   return vsf_sysutil_stat(str_getbuf(p_str), p_ptr);
  84. }
  85. int
  86. str_lstat(const struct mystr* p_str, struct vsf_sysutil_statbuf** p_ptr)
  87. {
  88.   return vsf_sysutil_lstat(str_getbuf(p_str), p_ptr);
  89. }
  90. int
  91. str_create(const struct mystr* p_str)
  92. {
  93.   return vsf_sysutil_create_file(str_getbuf(p_str));
  94. }
  95. int
  96. str_create_overwrite(const struct mystr* p_str)
  97. {
  98.   return vsf_sysutil_create_overwrite_file(str_getbuf(p_str));
  99. }
  100. int
  101. str_create_append(const struct mystr* p_str)
  102. {
  103.   return vsf_sysutil_create_or_open_file(
  104.       str_getbuf(p_str), tunable_file_open_mode);
  105. }
  106. int
  107. str_chmod(const struct mystr* p_str, unsigned int mode)
  108. {
  109.   return vsf_sysutil_chmod(str_getbuf(p_str), mode);
  110. }
  111. int
  112. str_rename(const struct mystr* p_from_str, const struct mystr* p_to_str)
  113. {
  114.   return vsf_sysutil_rename(str_getbuf(p_from_str), str_getbuf(p_to_str));
  115. }
  116. struct vsf_sysutil_dir*
  117. str_opendir(const struct mystr* p_str)
  118. {
  119.   return vsf_sysutil_opendir(str_getbuf(p_str));
  120. }
  121. void
  122. str_next_dirent(struct mystr* p_filename_str, struct vsf_sysutil_dir* p_dir)
  123. {
  124.   const char* p_filename = vsf_sysutil_next_dirent(p_dir);
  125.   str_empty(p_filename_str);
  126.   if (p_filename != 0)
  127.   {
  128.     str_alloc_text(p_filename_str, p_filename);
  129.   }
  130. }
  131. int
  132. str_readlink(struct mystr* p_str, const struct mystr* p_filename_str)
  133. {
  134.   static char* p_readlink_buf;
  135.   int retval;
  136.   if (p_readlink_buf == 0)
  137.   {
  138.     vsf_secbuf_alloc(&p_readlink_buf, VSFTP_PATH_MAX);
  139.   }
  140.   /* In case readlink() fails */
  141.   str_empty(p_str);
  142.   /* Note: readlink(2) does not NULL terminate, but our wrapper does */
  143.   retval = vsf_sysutil_readlink(str_getbuf(p_filename_str), p_readlink_buf,
  144.                                 VSFTP_PATH_MAX);
  145.   if (vsf_sysutil_retval_is_error(retval))
  146.   {
  147.     return retval;
  148.   }
  149.   str_alloc_text(p_str, p_readlink_buf);
  150.   return 0;
  151. }
  152. struct vsf_sysutil_user*
  153. str_getpwnam(const struct mystr* p_user_str)
  154. {
  155.   return vsf_sysutil_getpwnam(str_getbuf(p_user_str));
  156. }
  157. void
  158. str_syslog(const struct mystr* p_str, int severe)
  159. {
  160.   vsf_sysutil_syslog(str_getbuf(p_str), severe);
  161. }