James Addison dixit: >... to add something like this:
Ouch, by going via a string?! I wouldn’t have thought of that… > if (!(flags & ProcessInitializationFlags::kNoAdjustResourceLimits)) { > struct rlimit lim; > if (getrlimit(RLIMIT_STACK, &lim) == 0) { > char stackSize[32]; 32 is magic and may also be wrong here. > int buflen = snprintf(stackSize, sizeof(stackSize), >"--stack-size=%d", lim.rlim_cur); %d isn’t right for lim.rlim_cur, which is of type rlim_t. --stack-size seems to take in KiB, and we’d want a reserve. > if (buflen < sizeof(stackSize)) { > V8::SetFlagsFromString(stackSize, buflen); > } > } > } So, taking your next post into account, probably something more like this: #define V8_STACK_RESERVE 128 if (!(flags & ProcessInitializationFlags::kNoAdjustResourceLimits)) { struct rlimit lim; char stackSize[sizeof("--stack-size=") + /* 2³¹ */ 10]; if (getrlimit(RLIMIT_STACK, &lim)) fprintf(stderr, "W: stack size adjustment: cannot get RLIMIT_STACK\n"); else if (lim.rlim_cur == RLIM_INFINITY) fprintf(stderr, "W: stack size adjustment: RLIMIT_STACK is unlimited\n"); else if ((lim.rlim_cur /= 1024) <= V8_STACK_RESERVE) fprintf(stderr, "W: stack size adjustment: RLIMIT_STACK is too small\n"); else if ((lim.rlim_cur -= V8_STACK_RESERVE) >= /* 2³¹ */ 2147483647) fprintf(stderr, "W: stack size adjustment: RLIMIT_STACK is too large\n"); else V8::SetFlagsFromString(stackSize, snprintf(stackSize, sizeof(stackSize), "--stack-size=%d", (int)lim.rlim_cur)); } Untested, still not back to full health, take with grains of salt. bye, //mirabilos -- In traditional syntax ' is ignored, but in c99 everything between two ' is handled as character constant. Therefore you cannot use ' in a preproces- sing file in c99 mode. -- Ragge No faith left in ISO C99, undefined behaviour, etc.