diff options
Diffstat (limited to 'ifuncs.h')
-rw-r--r-- | ifuncs.h | 112 |
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; +} |