mirror of
https://github.com/Ylianst/MeshAgent
synced 2025-12-11 05:43:33 +00:00
Added ability to get/set rlimits on non windows platforms
This commit is contained in:
@@ -155,20 +155,22 @@ int Duktape_GetIntPropertyValue(duk_context *ctx, duk_idx_t i, char* propertyNam
|
|||||||
}
|
}
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
void Duktape_CreateEnum(duk_context *ctx, char* enumName, char** fieldNames, int * fieldValues, int numFields)
|
void Duktape_CreateEnum(duk_context *ctx, char* enumName, char **fieldNames, int *fieldValues, int numFields)
|
||||||
|
{
|
||||||
|
duk_push_global_object(ctx);
|
||||||
|
Duktape_CreateEnumEx(ctx, fieldNames, fieldValues, numFields);
|
||||||
|
duk_put_prop_string(ctx, -2, enumName);
|
||||||
|
duk_pop(ctx);
|
||||||
|
}
|
||||||
|
void Duktape_CreateEnumEx(duk_context *ctx, char** fieldNames, int * fieldValues, int numFields)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
duk_push_global_object(ctx); // [global]
|
duk_push_object(ctx); // [obj]
|
||||||
duk_push_object(ctx); // [global][obj]
|
|
||||||
|
|
||||||
for (i = 0; i < numFields; ++i)
|
for (i = 0; i < numFields; ++i)
|
||||||
{
|
{
|
||||||
duk_push_int(ctx, fieldValues[i]); // [global][obj][val]
|
duk_push_int(ctx, fieldValues[i]); // [obj][val]
|
||||||
duk_put_prop_string(ctx, -2, fieldNames[i]); // [global][obj]
|
duk_put_prop_string(ctx, -2, fieldNames[i]); // [obj]
|
||||||
}
|
}
|
||||||
duk_put_prop_string(ctx, -2, enumName); // [global]
|
|
||||||
|
|
||||||
duk_pop(ctx);
|
|
||||||
}
|
}
|
||||||
char *Duktape_GetStashKey(void* value)
|
char *Duktape_GetStashKey(void* value)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -52,7 +52,8 @@ char* Duktape_GetContextGuidHex(duk_context *ctx, void *db);
|
|||||||
void *Duktape_GetChain(duk_context *ctx);
|
void *Duktape_GetChain(duk_context *ctx);
|
||||||
char *Duktape_GetStashKey(void* value);
|
char *Duktape_GetStashKey(void* value);
|
||||||
char* Duktape_GetBuffer(duk_context *ctx, duk_idx_t i, duk_size_t *bufLen);
|
char* Duktape_GetBuffer(duk_context *ctx, duk_idx_t i, duk_size_t *bufLen);
|
||||||
void Duktape_CreateEnum(duk_context *ctx, char* enumName, char** fieldNames, int * fieldValues, int numFields);
|
void Duktape_CreateEnumEx(duk_context *ctx, char** fieldNames, int * fieldValues, int numFields);
|
||||||
|
void Duktape_CreateEnum(duk_context *ctx, char* enumName, char **fieldNames, int *fieldValues, int numFields);
|
||||||
char* Duktape_GetStringPropertyValueEx(duk_context *ctx, duk_idx_t i, char* propertyName, char* defaultValue, duk_size_t *len);
|
char* Duktape_GetStringPropertyValueEx(duk_context *ctx, duk_idx_t i, char* propertyName, char* defaultValue, duk_size_t *len);
|
||||||
#define Duktape_GetStringPropertyValue(ctx, i, propertyName, defaultValue) Duktape_GetStringPropertyValueEx(ctx, i, propertyName, defaultValue, NULL)
|
#define Duktape_GetStringPropertyValue(ctx, i, propertyName, defaultValue) Duktape_GetStringPropertyValueEx(ctx, i, propertyName, defaultValue, NULL)
|
||||||
int Duktape_GetIntPropertyValue(duk_context *ctx, duk_idx_t i, char* propertyName, int defaultValue);
|
int Duktape_GetIntPropertyValue(duk_context *ctx, duk_idx_t i, char* propertyName, int defaultValue);
|
||||||
|
|||||||
@@ -42,6 +42,10 @@ limitations under the License.
|
|||||||
#include <crtdbg.h>
|
#include <crtdbg.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef WIN32
|
||||||
|
#include <sys/resource.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "ILibDuktape_ScriptContainer.h"
|
#include "ILibDuktape_ScriptContainer.h"
|
||||||
#include "ILibDuktapeModSearch.h"
|
#include "ILibDuktapeModSearch.h"
|
||||||
#include "ILibDuktape_EventEmitter.h"
|
#include "ILibDuktape_EventEmitter.h"
|
||||||
@@ -979,6 +983,41 @@ duk_ret_t ILibDuktape_ScriptContainer_Process_coreDumpLocation_setter(duk_contex
|
|||||||
}
|
}
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
#ifndef WIN32
|
||||||
|
duk_ret_t ILibDuktape_ScriptContainer_Process_rlimit_getterFunc(duk_context *ctx)
|
||||||
|
{
|
||||||
|
int resource = duk_require_int(ctx, 0);
|
||||||
|
struct rlimit r;
|
||||||
|
if (getrlimit(resource, &r) == 0)
|
||||||
|
{
|
||||||
|
duk_push_object(ctx);
|
||||||
|
duk_push_int(ctx, (duk_int_t)r.rlim_cur); duk_put_prop_string(ctx, -2, "soft");
|
||||||
|
duk_push_int(ctx, (duk_int_t)r.rlim_max); duk_put_prop_string(ctx, -2, "hard");
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
return(ILibDuktape_Error(ctx, "Error Occured fetching limits"));
|
||||||
|
}
|
||||||
|
duk_ret_t ILibDuktape_ScriptContainer_Process_rlimit_setterFunc(duk_context *ctx)
|
||||||
|
{
|
||||||
|
int resource = duk_require_int(ctx, 0);
|
||||||
|
struct rlimit r;
|
||||||
|
r.rlim_cur = Duktape_GetIntPropertyValue(ctx, 1, "soft", -1);
|
||||||
|
r.rlim_max = Duktape_GetIntPropertyValue(ctx, 1, "hard", -1);
|
||||||
|
|
||||||
|
if (setrlimit(resource, &r) == 0)
|
||||||
|
{
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
return(ILibDuktape_Error(ctx, "Error Occured settings limits"));
|
||||||
|
}
|
||||||
|
duk_ret_t ILibDuktape_ScriptContainer_Process_rlimit_getter(duk_context *ctx)
|
||||||
|
{
|
||||||
|
duk_push_object(ctx);
|
||||||
|
duk_push_c_function(ctx, ILibDuktape_ScriptContainer_Process_rlimit_getterFunc, 1); duk_put_prop_string(ctx, -2, "get");
|
||||||
|
duk_push_c_function(ctx, ILibDuktape_ScriptContainer_Process_rlimit_setterFunc, 2); duk_put_prop_string(ctx, -2, "set");
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void ILibDuktape_ScriptContainer_Process_Init(duk_context *ctx, char **argList)
|
void ILibDuktape_ScriptContainer_Process_Init(duk_context *ctx, char **argList)
|
||||||
{
|
{
|
||||||
@@ -995,7 +1034,12 @@ void ILibDuktape_ScriptContainer_Process_Init(duk_context *ctx, char **argList)
|
|||||||
ILibDuktape_CreateInstanceMethod(ctx, "cwd", ILibDuktape_Process_cwd, 0);
|
ILibDuktape_CreateInstanceMethod(ctx, "cwd", ILibDuktape_Process_cwd, 0);
|
||||||
ILibDuktape_CreateInstanceMethod(ctx, "setenv", ILibDuktape_Process_setenv, 2);
|
ILibDuktape_CreateInstanceMethod(ctx, "setenv", ILibDuktape_Process_setenv, 2);
|
||||||
ILibDuktape_CreateEventWithGetterAndSetterEx(ctx, "coreDumpLocation", ILibDuktape_ScriptContainer_Process_coreDumpLocation_getter, ILibDuktape_ScriptContainer_Process_coreDumpLocation_setter);
|
ILibDuktape_CreateEventWithGetterAndSetterEx(ctx, "coreDumpLocation", ILibDuktape_ScriptContainer_Process_coreDumpLocation_getter, ILibDuktape_ScriptContainer_Process_coreDumpLocation_setter);
|
||||||
|
#ifndef WIN32
|
||||||
|
ILibDuktape_CreateEventWithGetter(ctx, "rlimit", ILibDuktape_ScriptContainer_Process_rlimit_getter);
|
||||||
|
Duktape_CreateEnumEx(ctx, (char*[]) { "AS", "CORE", "CPU", "DATA", "FSIZE", "LOCKS", "MEMLOCK", "MGSQUEUE", "NICE", "NOFILE", "NPROC", "RSS", "RTPRIO", "SIGPENDING", "STACK" },
|
||||||
|
(int[]) {9, 4, 0, 2, 1, 10, 8, 12, 13, 7, 6, 5, 14, 11, 3}, 15);
|
||||||
|
duk_put_prop_string(ctx, -2, "RLIMITS");
|
||||||
|
#endif
|
||||||
duk_push_object(ctx);
|
duk_push_object(ctx);
|
||||||
if (sslvS != ((char*)NULL + 1))
|
if (sslvS != ((char*)NULL + 1))
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user