summaryrefslogtreecommitdiffstats
path: root/ifuncs.h
diff options
context:
space:
mode:
Diffstat (limited to 'ifuncs.h')
-rw-r--r--ifuncs.h112
1 files changed, 112 insertions, 0 deletions
diff --git a/ifuncs.h b/ifuncs.h
new file mode 100644
index 0000000..956fc22
--- /dev/null
+++ b/ifuncs.h
@@ -0,0 +1,112 @@
+/* Inline functions for rsync.
+ *
+ * Copyright (C) 2007-2022 Wayne Davison
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, visit the http://fsf.org website.
+ */
+
+static inline void
+alloc_xbuf(xbuf *xb, size_t sz)
+{
+ xb->buf = new_array(char, sz);
+ xb->size = sz;
+ xb->len = xb->pos = 0;
+}
+
+static inline void
+realloc_xbuf(xbuf *xb, size_t sz)
+{
+ char *bf = realloc_array(xb->buf, char, sz);
+ xb->buf = bf;
+ xb->size = sz;
+}
+
+static inline void
+free_xbuf(xbuf *xb)
+{
+ if (xb->buf)
+ free(xb->buf);
+ memset(xb, 0, sizeof (xbuf));
+}
+
+static inline int
+to_wire_mode(mode_t mode)
+{
+#ifdef SUPPORT_LINKS
+#if _S_IFLNK != 0120000
+ if (S_ISLNK(mode))
+ return (mode & ~(_S_IFMT)) | 0120000;
+#endif
+#endif
+ return mode;
+}
+
+static inline mode_t
+from_wire_mode(int mode)
+{
+#if _S_IFLNK != 0120000
+ if ((mode & (_S_IFMT)) == 0120000)
+ return (mode & ~(_S_IFMT)) | _S_IFLNK;
+#endif
+ return mode;
+}
+
+static inline char *
+d_name(struct dirent *di)
+{
+#ifdef HAVE_BROKEN_READDIR
+ return (di->d_name - 2);
+#else
+ return di->d_name;
+#endif
+}
+
+static inline void
+init_stat_x(stat_x *sx_p)
+{
+ sx_p->crtime = 0;
+#ifdef SUPPORT_ACLS
+ sx_p->acc_acl = sx_p->def_acl = NULL;
+#endif
+#ifdef SUPPORT_XATTRS
+ sx_p->xattr = NULL;
+#endif
+}
+
+static inline void
+free_stat_x(stat_x *sx_p)
+{
+#ifdef SUPPORT_ACLS
+ {
+ extern int preserve_acls;
+ if (preserve_acls)
+ free_acl(sx_p);
+ }
+#endif
+#ifdef SUPPORT_XATTRS
+ {
+ extern int preserve_xattrs;
+ if (preserve_xattrs)
+ free_xattr(sx_p);
+ }
+#endif
+}
+
+static inline char *my_strdup(const char *str, const char *file, int line)
+{
+ int len = strlen(str)+1;
+ char *buf = my_alloc(NULL, len, 1, file, line);
+ memcpy(buf, str, len);
+ return buf;
+}