home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / rsync221.zip / syscall.c < prev    next >
C/C++ Source or Header  |  1999-03-12  |  4KB  |  187 lines

  1. /* 
  2.    Copyright (C) Andrew Tridgell 1998
  3.    
  4.    This program is free software; you can redistribute it and/or modify
  5.    it under the terms of the GNU General Public License as published by
  6.    the Free Software Foundation; either version 2 of the License, or
  7.    (at your option) any later version.
  8.    
  9.    This program is distributed in the hope that it will be useful,
  10.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.    GNU General Public License for more details.
  13.    
  14.    You should have received a copy of the GNU General Public License
  15.    along with this program; if not, write to the Free Software
  16.    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  17. */
  18.  
  19. /*
  20.   syscall wrappers to ensure that nothing gets done in dry_run mode
  21.   */
  22.  
  23. #include "rsync.h"
  24.  
  25. extern int dry_run;
  26. extern int read_only;
  27.  
  28. #define CHECK_RO if (read_only) {errno = EROFS; return -1;}
  29.  
  30. int do_unlink(char *fname)
  31. {
  32.     if (dry_run) return 0;
  33.     CHECK_RO
  34.     return unlink(fname);
  35. }
  36.  
  37. int do_symlink(char *fname1, char *fname2)
  38. {
  39. #ifdef __EMX__
  40.     return -1;
  41. #else
  42.     if (dry_run) return 0;
  43.     CHECK_RO
  44.     return symlink(fname1, fname2);
  45. #endif
  46. }
  47.  
  48. #if HAVE_LINK
  49. int do_link(char *fname1, char *fname2)
  50. {
  51.     if (dry_run) return 0;
  52.     CHECK_RO
  53.     return link(fname1, fname2);
  54. }
  55. #endif
  56.  
  57. int do_lchown(const char *path, uid_t owner, gid_t group)
  58. {
  59.     if (dry_run) return 0;
  60.     CHECK_RO
  61. #ifdef __EMX__
  62.     return 0;
  63. #else
  64.     return lchown(path, owner, group);
  65. #endif
  66. }
  67.  
  68. #if HAVE_MKNOD
  69. int do_mknod(char *pathname, mode_t mode, dev_t dev)
  70. {
  71.     if (dry_run) return 0;
  72.     CHECK_RO
  73.     return mknod(pathname, mode, dev);
  74. }
  75. #endif
  76.  
  77. int do_rmdir(char *pathname)
  78. {
  79.     if (dry_run) return 0;
  80.     CHECK_RO
  81.     return rmdir(pathname);
  82. }
  83.  
  84. int do_open(char *pathname, int flags, mode_t mode)
  85. {
  86.     if (dry_run) return -1;
  87. #ifdef O_BINARY
  88.     /* for Windows */
  89.     flags |= O_BINARY;
  90. #endif
  91.     CHECK_RO
  92.     return open(pathname, flags, mode);
  93. }
  94.  
  95. #if HAVE_CHMOD
  96. int do_chmod(const char *path, mode_t mode)
  97. {
  98.     if (dry_run) return 0;
  99.     CHECK_RO
  100.     return chmod(path, mode);
  101. }
  102. #endif
  103.  
  104. int do_rename(char *fname1, char *fname2)
  105. {
  106.     if (dry_run) return 0;
  107.     CHECK_RO
  108. #ifdef __EMX__
  109.     /* OS/2 rename fails if target exist */
  110.     unlink(fname2);
  111. #endif
  112.     return rename(fname1, fname2);
  113. }
  114.  
  115. int do_mkdir(char *fname, mode_t mode)
  116. {
  117.     if (dry_run) return 0;
  118.     CHECK_RO
  119.     return mkdir(fname, mode);
  120. }
  121.  
  122. char *do_mktemp(char *template)
  123. {
  124.     if (dry_run) return NULL;
  125.     if (read_only) {errno = EROFS; return NULL;}
  126.     return mktemp(template);
  127. }
  128.  
  129. int do_stat(const char *fname, STRUCT_STAT *st)
  130. {
  131. #if HAVE_OFF64_T
  132.     return stat64(fname, st);
  133. #else
  134.     return stat(fname, st);
  135. #endif
  136. }
  137.  
  138. #if SUPPORT_LINKS
  139. int do_lstat(const char *fname, STRUCT_STAT *st)
  140. {
  141. #if HAVE_OFF64_T
  142.     return lstat64(fname, st);
  143. #else
  144.     return lstat(fname, st);
  145. #endif
  146. }
  147. #endif
  148.  
  149. int do_fstat(int fd, STRUCT_STAT *st)
  150. {
  151. #if HAVE_OFF64_T
  152.     return fstat64(fd, st);
  153. #else
  154.     return fstat(fd, st);
  155. #endif
  156. }
  157.  
  158. OFF_T do_lseek(int fd, OFF_T offset, int whence)
  159. {
  160. #if HAVE_OFF64_T
  161.     off64_t lseek64();
  162.     return lseek64(fd, offset, whence);
  163. #else
  164.     return lseek(fd, offset, whence);
  165. #endif
  166. }
  167.  
  168. #ifdef USE_MMAP
  169. void *do_mmap(void *start, int len, int prot, int flags, int fd, OFF_T offset)
  170. {
  171. #if HAVE_OFF64_T
  172.     return mmap64(start, len, prot, flags, fd, offset);
  173. #else
  174.     return mmap(start, len, prot, flags, fd, offset);
  175. #endif
  176. }
  177. #endif
  178.  
  179. char *d_name(struct dirent *di)
  180. {
  181. #if HAVE_BROKEN_READDIR
  182.     return (di->d_name - 2);
  183. #else
  184.     return di->d_name;
  185. #endif
  186. }
  187.