aboutsummaryrefslogtreecommitdiff
path: root/libpkgconf/stdinc.h
diff options
context:
space:
mode:
Diffstat (limited to 'libpkgconf/stdinc.h')
-rw-r--r--libpkgconf/stdinc.h65
1 files changed, 28 insertions, 37 deletions
diff --git a/libpkgconf/stdinc.h b/libpkgconf/stdinc.h
index abebe03..418a06a 100644
--- a/libpkgconf/stdinc.h
+++ b/libpkgconf/stdinc.h
@@ -26,14 +26,36 @@
#include <sys/types.h>
#include <stdint.h>
+/*
+ * The original libpkgconf package uses PKGCONF_BUFSIZE size for all
+ * stack-allocated buffers, imposing high requirements for the thread stack
+ * size. This make it unusable on MacOS (as of 10.12) for non-main threads that
+ * are created with the default 512KB stack size. In particular that make it
+ * impossible to use libpkgconf API in threads created with C++11 std::thread
+ * class, that doesn't allow stack size customization.
+ *
+ * As an example, using pkgconf_pkg_find() for quite a simple .pc file consumes
+ * at least 460KB. The measurement was made as a difference between addresses
+ * of 2 stack-allocated variables: one was defined right before the function
+ * call, another right after the buffer definition in pkgconf_tuple_parse()
+ * function.
+ *
+ * To relax the stack size requirements we will minimize the usage of
+ * PKGCONF_BUFSIZE, inventing the smaller PKGCONF_ITEM_SIZE, and using it
+ * wherever it is possible instead. The PKGCONF_ITEM_SIZE is selected in such a
+ * way that a buffer of this size can accommodate the file system path, the
+ * value fragment, the variable name or the package dependency specification.
+ * The latest implies it also fits for the package key or the package version.
+ * This optimization decreased the stack usage for the described use case to
+ * 140KB.
+ *
+ * Issue #149 is reported.
+ */
#ifdef _WIN32
# define WIN32_LEAN_AND_MEAN
# include <windows.h>
# include <malloc.h>
# define PATH_DEV_NULL "nul"
-/*
- * Fix MinGW GCC print format warnings (issue #142 is reported).
- */
# ifdef _WIN64
# define SIZE_FMT_SPECIFIER "%I64u"
# else
@@ -52,48 +74,17 @@
# else
# include <dirent.h>
# endif
+# define PKGCONF_ITEM_SIZE (_MAX_PATH + 1024)
#else
# define PATH_DEV_NULL "/dev/null"
# define SIZE_FMT_SPECIFIER "%zu"
# include <dirent.h>
# include <unistd.h>
-#endif
-
-/*
- * Stack-allocated buffer sizes.
- *
- * Original libpkgconf package uses PKGCONF_BUFSIZE size for all
- * stack-allocated buffers, imposing high requirements for the thread stack
- * size. This make it unusable on MacOS (as of 10.12) for non-main threads that
- * are created with the default 512K stack size. In particular that make it
- * impossible to use libpkgconf API in threads created with C++11 std::thread
- * class, that doesn't allow stack size customization.
- *
- * As an example, using pkgconf_pkg_find() for quite a simple .pc file consumes
- * at least 460K. The measurment was made as a differece between addresses of 2
- * stack-allocated variables: one was defined right before the function call,
- * another right after the buffer definition in pkgconf_tuple_parse() function.
- *
- * To relax the stack size requirements we will minimize the usage of
- * PKGCONF_BUFSIZE, using the smaller PKGCONF_SBUFSIZE instead, wherever it is
- * possible. The PKGCONF_SBUFSIZE is selected in such a way that a buffer of
- * this size can accommodate the file system path, the value fragment, the
- * variable name or the package dependency specification. The latest implies it
- * also fits for the package key or the package version. This optimization
- * decreased the stack usage for the described use case to 140K.
- *
- * Note that we moved PKGCONF_BUFSIZE definition from libpkgconf.h.
- */
-#define PKGCONF_BUFSIZE (65535)
-
-#ifdef _WIN32
-# define PKGCONF_SBUFSIZE (_MAX_PATH + 1024)
-#else
# include <limits.h>
# ifdef PATH_MAX
-# define PKGCONF_SBUFSIZE (PATH_MAX + 1024)
+# define PKGCONF_ITEM_SIZE (PATH_MAX + 1024)
# else
-# define PKGCONF_SBUFSIZE (4096 + 1024)
+# define PKGCONF_ITEM_SIZE (4096 + 1024)
# endif
#endif