summaryrefslogtreecommitdiff
path: root/locale/programs/locfile.c
diff options
context:
space:
mode:
Diffstat (limited to 'locale/programs/locfile.c')
-rw-r--r--locale/programs/locfile.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/locale/programs/locfile.c b/locale/programs/locfile.c
index e225e577d6..69d976160b 100644
--- a/locale/programs/locfile.c
+++ b/locale/programs/locfile.c
@@ -931,7 +931,7 @@ void
write_locale_data (const char *output_path, const char *category,
size_t n_elem, struct iovec *vec)
{
- size_t cnt, step;
+ size_t cnt, step, maxiov;
int fd;
char *fname;
@@ -959,11 +959,19 @@ write_locale_data (const char *output_path, const char *category,
}
free (fname);
+#ifdef UIO_MAXIOV
+ maxiov = UIO_MAXIOV;
+#else
+ maxiov = sysconf (_SC_UIO_MAXIOV);
+#endif
+
/* Write the data using writev. But we must take care for the
limitation of the implementation. */
for (cnt = 0; cnt < n_elem; cnt += step)
{
- step = MIN (UIO_MAXIOV, n_elem - cnt);
+ step = n_elem - cnt;
+ if (maxiov > 0)
+ step = MIN (maxiov, step);
if (writev (fd, &vec[cnt], step) < 0)
{