Make idev, hlink and file_struct + strings use allocation
[rsync/rsync.git] / rsync.h
diff --git a/rsync.h b/rsync.h
index 1937c7c..37a5d53 100644 (file)
--- a/rsync.h
+++ b/rsync.h
 #define FULL_FLUSH     1
 #define NORMAL_FLUSH   0
 
-#define CLEAR_STRUCT   0
-#define FREE_STRUCT    1
 
 /* Log-message categories.  FLOG is only used on the daemon side to
  * output messages to the log file. */
@@ -254,6 +252,7 @@ enum msgcode {
 
 #include <assert.h>
 
+#include "lib/pool_alloc.h"
 
 #define BOOL int
 
@@ -425,23 +424,37 @@ struct file_struct {
        char *basedir;
        uid_t uid;
        gid_t gid;
-       uchar flags;
+       uchar flags;    /* this item MUST remain last */
 };
 
-#define ARENA_SIZE     (32 * 1024)
+/*
+ * Start the flist array at FLIST_START entries and grow it
+ * by doubling until FLIST_LINEAR then grow by FLIST_LINEAR
+ */
+#define FLIST_START    (32 * 1024)
+#define FLIST_LINEAR   (FLIST_START * 512)
+/*
+ * Extent size for allocation pools A minimum size of 128KB
+ * is needed to mmap them so that freeing will release the
+ * space to the OS.
+ *
+ * Larger sizes reduce leftover fragments and speed free calls
+ * (when they happen) Smaller sizes increase the chance of
+ * freed allocations freeing whole extents.
+ */
 
-struct string_area {
-       char *base;
-       char *end;
-       char *current;
-       struct string_area *next;
-};
+#define FILE_EXTENT    (256 * 1024)
+#define HLINK_EXTENT   (128 * 1024)
+
+#define WITH_HLINK     1
+#define WITHOUT_HLINK  0
 
 struct file_list {
        int count;
        int malloced;
+       alloc_pool_t file_pool;
+       alloc_pool_t hlink_pool;
        struct file_struct **files;
-       struct string_area *string_area;
 };
 
 struct sum_buf {
@@ -712,6 +725,17 @@ size_t strlcat(char *d, const char *s, size_t bufsize);
 
 #define exit_cleanup(code) _exit_cleanup(code, __FILE__, __LINE__)
 
+#ifdef HAVE_GETEUID
+#define MY_UID() geteuid()
+#else
+#define MY_UID() getuid()
+#endif
+
+#ifdef HAVE_GETEGID
+#define MY_GID() getegid()
+#else
+#define MY_GID() getgid()
+#endif
 
 extern int verbose;