#define CURL_TEMP_PRINTF(fmt, arg)
#endif
-CURL_EXTERN int curl_mprintf(const char *format, ...) CURL_TEMP_PRINTF(1, 2);
+CURL_EXTERN int curl_mprintf(const char *format, ...)
+ CURL_TEMP_PRINTF(1, 2);
CURL_EXTERN int curl_mfprintf(FILE *fd, const char *format, ...)
CURL_TEMP_PRINTF(2, 3);
CURL_EXTERN int curl_msprintf(char *buffer, const char *format, ...)
CURL_TEMP_PRINTF(2, 3);
CURL_EXTERN int curl_msnprintf(char *buffer, size_t maxlength,
- const char *format, ...) CURL_TEMP_PRINTF(3, 4);
+ const char *format, ...)
+ CURL_TEMP_PRINTF(3, 4);
CURL_EXTERN int curl_mvprintf(const char *format, va_list args)
CURL_TEMP_PRINTF(1, 0);
CURL_EXTERN int curl_mvfprintf(FILE *fd, const char *format, va_list args)
va_start(ap, fmt);
DEBUGASSERT(!strchr(fmt, '\n'));
fputs("curl: ", errors); /* prefix it */
-#ifdef __clang__
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wformat-nonliteral"
-#endif
vfprintf(errors, fmt, ap);
-#ifdef __clang__
-#pragma clang diagnostic pop
-#endif
va_end(ap);
fputs("\n", errors); /* newline it */
}
return ret;
}
-#ifdef __clang__
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wformat-nonliteral"
+static void rlim2str(char *buf, size_t len, rlim_t val)
+{
+#ifdef RLIM_INFINITY
+ if(val == RLIM_INFINITY) {
+ msnprintf(buf, len, "INFINITY");
+ return;
+ }
+#endif
+#ifdef HAVE_LONGLONG
+ if(sizeof(rlim_t) > sizeof(long))
+ msnprintf(buf, len, "%llu", (unsigned long long)val);
+ else
#endif
+ {
+ if(sizeof(rlim_t) < sizeof(long))
+ msnprintf(buf, len, "%u", (unsigned int)val);
+ else
+ msnprintf(buf, len, "%lu", (unsigned long)val);
+ }
+}
static int rlimit(int keep_open)
{
- int nitems, i;
+ rlim_t nitems, i;
int *memchunk = NULL;
- char *fmt;
struct rlimit rl;
char strbuff[256];
char strbuff1[81];
char strbuff2[81];
- char fmt_u[] = "%u";
- char fmt_lu[] = "%lu";
-#ifdef HAVE_LONGLONG
- char fmt_llu[] = "%llu";
-
- if(sizeof(rl.rlim_max) > sizeof(long))
- fmt = fmt_llu;
- else
-#endif
- fmt = (sizeof(rl.rlim_max) < sizeof(long))?fmt_u:fmt_lu;
/* get initial open file limits */
/* show initial open file limits */
-#ifdef RLIM_INFINITY
- if(rl.rlim_cur == RLIM_INFINITY)
- strcpy(strbuff, "INFINITY");
- else
-#endif
- msnprintf(strbuff, sizeof(strbuff), fmt, rl.rlim_cur);
+ rlim2str(strbuff, sizeof(strbuff), rl.rlim_cur);
fprintf(stderr, "initial soft limit: %s\n", strbuff);
-#ifdef RLIM_INFINITY
- if(rl.rlim_max == RLIM_INFINITY)
- strcpy(strbuff, "INFINITY");
- else
-#endif
- msnprintf(strbuff, sizeof(strbuff), fmt, rl.rlim_max);
+ rlim2str(strbuff, sizeof(strbuff), rl.rlim_max);
fprintf(stderr, "initial hard limit: %s\n", strbuff);
/* show our constants */
/* show current open file limits */
-#ifdef RLIM_INFINITY
- if(rl.rlim_cur == RLIM_INFINITY)
- strcpy(strbuff, "INFINITY");
- else
-#endif
- msnprintf(strbuff, sizeof(strbuff), fmt, rl.rlim_cur);
+ rlim2str(strbuff, sizeof(strbuff), rl.rlim_cur);
fprintf(stderr, "current soft limit: %s\n", strbuff);
-#ifdef RLIM_INFINITY
- if(rl.rlim_max == RLIM_INFINITY)
- strcpy(strbuff, "INFINITY");
- else
-#endif
- msnprintf(strbuff, sizeof(strbuff), fmt, rl.rlim_max);
+ rlim2str(strbuff, sizeof(strbuff), rl.rlim_max);
fprintf(stderr, "current hard limit: %s\n", strbuff);
} /* (rl.rlim_cur != rl.rlim_max) */
(rl.rlim_cur != RLIM_INFINITY) &&
#endif
(rl.rlim_cur <= num_open.rlim_cur)) {
- msnprintf(strbuff2, sizeof(strbuff2), fmt, rl.rlim_cur);
- msnprintf(strbuff1, sizeof(strbuff1), fmt, num_open.rlim_cur);
+ rlim2str(strbuff2, sizeof(strbuff2), rl.rlim_cur);
+ rlim2str(strbuff1, sizeof(strbuff1), num_open.rlim_cur);
msnprintf(strbuff, sizeof(strbuff), "fds needed %s > system limit %s",
strbuff1, strbuff2);
store_errmsg(strbuff, 0);
if(nitems > 0x7fff)
nitems = 0x40000;
do {
- num_open.rlim_max = sizeof(*memchunk) * (size_t)nitems;
- msnprintf(strbuff, sizeof(strbuff), fmt, num_open.rlim_max);
+ num_open.rlim_max = sizeof(*memchunk) * nitems;
+ rlim2str(strbuff, sizeof(strbuff), num_open.rlim_max);
fprintf(stderr, "allocating memchunk %s byte array\n", strbuff);
memchunk = malloc(sizeof(*memchunk) * (size_t)nitems);
if(!memchunk) {
/* verify that we won't overflow size_t in malloc() */
if((size_t)(num_open.rlim_max) > ((size_t)-1) / sizeof(*fd)) {
- msnprintf(strbuff1, sizeof(strbuff1), fmt, num_open.rlim_max);
+ rlim2str(strbuff1, sizeof(strbuff1), num_open.rlim_max);
msnprintf(strbuff, sizeof(strbuff), "unable to allocate an array for %s "
"file descriptors, would overflow size_t", strbuff1);
store_errmsg(strbuff, 0);
/* allocate array for file descriptors */
- msnprintf(strbuff, sizeof(strbuff), fmt, num_open.rlim_max);
+ rlim2str(strbuff, sizeof(strbuff), num_open.rlim_max);
fprintf(stderr, "allocating array for %s file descriptors\n", strbuff);
fd = malloc(sizeof(*fd) * (size_t)(num_open.rlim_max));
num_open.rlim_cur++)
fd[num_open.rlim_cur] = -1;
- msnprintf(strbuff, sizeof(strbuff), fmt, num_open.rlim_max);
+ rlim2str(strbuff, sizeof(strbuff), num_open.rlim_max);
fprintf(stderr, "trying to open %s file descriptors\n", strbuff);
/* open a dummy descriptor */
fd[num_open.rlim_cur] = -1;
- msnprintf(strbuff1, sizeof(strbuff1), fmt, num_open.rlim_cur);
+ rlim2str(strbuff1, sizeof(strbuff1), num_open.rlim_cur);
msnprintf(strbuff, sizeof(strbuff), "dup() attempt %s failed", strbuff1);
fprintf(stderr, "%s\n", strbuff);
- msnprintf(strbuff1, sizeof(strbuff), fmt, num_open.rlim_cur);
+ rlim2str(strbuff1, sizeof(strbuff1), num_open.rlim_cur);
msnprintf(strbuff, sizeof(strbuff), "fds system limit seems close to %s",
- strbuff1);
+ strbuff1);
fprintf(stderr, "%s\n", strbuff);
num_open.rlim_max = NUM_NEEDED;
- msnprintf(strbuff2, sizeof(strbuff2), fmt, num_open.rlim_max);
- msnprintf(strbuff1, sizeof(strbuff1), fmt, num_open.rlim_cur);
+ rlim2str(strbuff2, sizeof(strbuff2), num_open.rlim_max);
+ rlim2str(strbuff1, sizeof(strbuff1), num_open.rlim_cur);
msnprintf(strbuff, sizeof(strbuff), "fds needed %s > system limit %s",
- strbuff2, strbuff1);
+ strbuff2, strbuff1);
store_errmsg(strbuff, 0);
fprintf(stderr, "%s\n", msgbuff);
fd = NULL;
free(memchunk);
return -9;
-
}
-
}
- msnprintf(strbuff, sizeof(strbuff), fmt, num_open.rlim_max);
+ rlim2str(strbuff, sizeof(strbuff), num_open.rlim_max);
fprintf(stderr, "%s file descriptors open\n", strbuff);
#if !defined(HAVE_POLL_FINE) && !defined(USE_WINSOCK)
num_open.rlim_cur = FD_SETSIZE - SAFETY_MARGIN;
if(num_open.rlim_max > num_open.rlim_cur) {
msnprintf(strbuff, sizeof(strbuff), "select limit is FD_SETSIZE %d",
- FD_SETSIZE);
+ FD_SETSIZE);
store_errmsg(strbuff, 0);
fprintf(stderr, "%s\n", msgbuff);
close_file_descriptors();
if((fd[rl.rlim_cur] > 0) &&
((unsigned int)fd[rl.rlim_cur] > num_open.rlim_cur)) {
msnprintf(strbuff, sizeof(strbuff), "select limit is FD_SETSIZE %d",
- FD_SETSIZE);
+ FD_SETSIZE);
store_errmsg(strbuff, 0);
fprintf(stderr, "%s\n", msgbuff);
close_file_descriptors();
*/
if(!fopen_works()) {
- msnprintf(strbuff1, sizeof(strbuff1), fmt, num_open.rlim_max);
- msnprintf(strbuff, sizeof(strbuff),
- "fopen fails with %s fds open()",
- strbuff1);
+ rlim2str(strbuff1, sizeof(strbuff1), num_open.rlim_max);
+ msnprintf(strbuff, sizeof(strbuff), "fopen fails with %s fds open",
+ strbuff1);
fprintf(stderr, "%s\n", msgbuff);
- msnprintf(strbuff, sizeof(strbuff),
- "fopen fails with lots of fds open()");
+ msnprintf(strbuff, sizeof(strbuff), "fopen fails with lots of fds open");
store_errmsg(strbuff, 0);
close_file_descriptors();
free(memchunk);
return 0;
}
-#ifdef __clang__
-#pragma clang diagnostic pop
-#endif
-
int test(char *URL)
{
CURLcode res;
if(!err)
msnprintf(msgbuff, sizeof(msgbuff), "%s", msg);
else
- msnprintf(msgbuff, sizeof(msgbuff), "%s, errno %d, %s", msg, err,
- strerror(err));
+ msnprintf(msgbuff, sizeof(msgbuff), "%s, errno %d, %s", msg,
+ err, strerror(err));
}
static void close_file_descriptors(void)
return ret;
}
-#ifdef __clang__
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wformat-nonliteral"
+static void rlim2str(char *buf, size_t len, rlim_t val)
+{
+#ifdef RLIM_INFINITY
+ if(val == RLIM_INFINITY) {
+ msnprintf(buf, len, "INFINITY");
+ return;
+ }
+#endif
+#ifdef HAVE_LONGLONG
+ if(sizeof(rlim_t) > sizeof(long))
+ msnprintf(buf, len, "%llu", (unsigned long long)val);
+ else
#endif
+ {
+ if(sizeof(rlim_t) < sizeof(long))
+ msnprintf(buf, len, "%u", (unsigned int)val);
+ else
+ msnprintf(buf, len, "%lu", (unsigned long)val);
+ }
+}
static int rlimit(int keep_open)
{
int *tmpfd;
rlim_t nitems, i;
int *memchunk = NULL;
- char *fmt;
struct rlimit rl;
char strbuff[256];
char strbuff1[81];
- char fmt_u[] = "%u";
- char fmt_lu[] = "%lu";
-#ifdef HAVE_LONGLONG
- char fmt_llu[] = "%llu";
-
- if(sizeof(rl.rlim_max) > sizeof(long))
- fmt = fmt_llu;
- else
-#endif
- fmt = (sizeof(rl.rlim_max) < sizeof(long))?fmt_u:fmt_lu;
/* get initial open file limits */
/* show initial open file limits */
-#ifdef RLIM_INFINITY
- if(rl.rlim_cur == RLIM_INFINITY)
- strcpy(strbuff, "INFINITY");
- else
-#endif
- msnprintf(strbuff, sizeof(strbuff), fmt, rl.rlim_cur);
+ rlim2str(strbuff, sizeof(strbuff), rl.rlim_cur);
fprintf(stderr, "initial soft limit: %s\n", strbuff);
-#ifdef RLIM_INFINITY
- if(rl.rlim_max == RLIM_INFINITY)
- strcpy(strbuff, "INFINITY");
- else
-#endif
- msnprintf(strbuff, sizeof(strbuff), fmt, rl.rlim_max);
+ rlim2str(strbuff, sizeof(strbuff), rl.rlim_max);
fprintf(stderr, "initial hard limit: %s\n", strbuff);
/*
#ifdef OPEN_MAX
if((rl.rlim_cur > 0) &&
- (rl.rlim_cur < OPEN_MAX)) {
+ (rl.rlim_cur < OPEN_MAX)) {
fprintf(stderr, "raising soft limit up to OPEN_MAX\n");
rl.rlim_cur = OPEN_MAX;
if(setrlimit(RLIMIT_NOFILE, &rl) != 0) {
/* show current open file limits */
-#ifdef RLIM_INFINITY
- if(rl.rlim_cur == RLIM_INFINITY)
- strcpy(strbuff, "INFINITY");
- else
-#endif
- msnprintf(strbuff, sizeof(strbuff), fmt, rl.rlim_cur);
+ rlim2str(strbuff, sizeof(strbuff), rl.rlim_cur);
fprintf(stderr, "current soft limit: %s\n", strbuff);
-#ifdef RLIM_INFINITY
- if(rl.rlim_max == RLIM_INFINITY)
- strcpy(strbuff, "INFINITY");
- else
-#endif
- msnprintf(strbuff, sizeof(strbuff), fmt, rl.rlim_max);
+ rlim2str(strbuff, sizeof(strbuff), rl.rlim_max);
fprintf(stderr, "current hard limit: %s\n", strbuff);
} /* (rl.rlim_cur != rl.rlim_max) */
nitems = 0x40000;
do {
num_open.rlim_max = sizeof(*memchunk) * nitems;
- msnprintf(strbuff, sizeof(strbuff), fmt, num_open.rlim_max);
+ rlim2str(strbuff, sizeof(strbuff), num_open.rlim_max);
fprintf(stderr, "allocating memchunk %s byte array\n", strbuff);
memchunk = malloc(sizeof(*memchunk) * (size_t)nitems);
if(!memchunk) {
/* verify that we won't overflow size_t in malloc() */
if((size_t)(num_open.rlim_max) > ((size_t)-1) / sizeof(*fd)) {
- msnprintf(strbuff1, sizeof(strbuff1), fmt, num_open.rlim_max);
+ rlim2str(strbuff1, sizeof(strbuff1), num_open.rlim_max);
msnprintf(strbuff, sizeof(strbuff), "unable to allocate an array for %s "
"file descriptors, would overflow size_t", strbuff1);
store_errmsg(strbuff, 0);
/* allocate array for file descriptors */
do {
- msnprintf(strbuff, sizeof(strbuff), fmt, num_open.rlim_max);
+ rlim2str(strbuff, sizeof(strbuff), num_open.rlim_max);
fprintf(stderr, "allocating array for %s file descriptors\n", strbuff);
+
fd = malloc(sizeof(*fd) * (size_t)(num_open.rlim_max));
if(!fd) {
fprintf(stderr, "fd, malloc() failed\n");
num_open.rlim_cur++)
fd[num_open.rlim_cur] = -1;
- msnprintf(strbuff, sizeof(strbuff), fmt, num_open.rlim_max);
+ rlim2str(strbuff, sizeof(strbuff), num_open.rlim_max);
fprintf(stderr, "trying to open %s file descriptors\n", strbuff);
/* open a dummy descriptor */
fd[num_open.rlim_cur] = -1;
- msnprintf(strbuff1, sizeof(strbuff1), fmt, num_open.rlim_cur);
+ rlim2str(strbuff1, sizeof(strbuff1), num_open.rlim_cur);
msnprintf(strbuff, sizeof(strbuff), "dup() attempt %s failed", strbuff1);
fprintf(stderr, "%s\n", strbuff);
- msnprintf(strbuff1, sizeof(strbuff1), fmt, num_open.rlim_cur);
+ rlim2str(strbuff1, sizeof(strbuff1), num_open.rlim_cur);
msnprintf(strbuff, sizeof(strbuff), "fds system limit seems close to %s",
strbuff1);
fprintf(stderr, "%s\n", strbuff);
num_open.rlim_max = num_open.rlim_cur - SAFETY_MARGIN;
num_open.rlim_cur -= num_open.rlim_max;
- msnprintf(strbuff1, sizeof(strbuff1), fmt, num_open.rlim_cur);
+ rlim2str(strbuff1, sizeof(strbuff1), num_open.rlim_cur);
msnprintf(strbuff, sizeof(strbuff), "closing %s file descriptors",
strbuff1);
fprintf(stderr, "%s\n", strbuff);
fd[num_open.rlim_cur] = -1;
}
- msnprintf(strbuff, sizeof(strbuff), fmt, num_open.rlim_max);
+ rlim2str(strbuff, sizeof(strbuff), num_open.rlim_max);
fprintf(stderr, "shrinking array for %s file descriptors\n", strbuff);
/* we don't care if we can't shrink it */
}
break;
-
}
-
}
- msnprintf(strbuff, sizeof(strbuff), fmt, num_open.rlim_max);
+ rlim2str(strbuff, sizeof(strbuff), num_open.rlim_max);
fprintf(stderr, "%s file descriptors open\n", strbuff);
#if !defined(HAVE_POLL_FINE) && !defined(USE_WINSOCK)
*/
if(!fopen_works()) {
- msnprintf(strbuff1, sizeof(strbuff1), fmt, num_open.rlim_max);
+ rlim2str(strbuff1, sizeof(strbuff1), num_open.rlim_max);
msnprintf(strbuff, sizeof(strbuff), "fopen fails with %s fds open",
strbuff1);
fprintf(stderr, "%s\n", msgbuff);
return 0;
}
-#ifdef __clang__
-#pragma clang diagnostic pop
-#endif
-
int test(char *URL)
{
CURLcode res;