txlyre 6 days ago
parent
commit
11e981dfd6
1 changed files with 22 additions and 0 deletions
  1. 22 0
      qirt.c

+ 22 - 0
qirt.c

@@ -3393,6 +3393,25 @@ qi_value_t *qi_builtin_get_globals(qi_state_t *state, qi_size_t pargc,
   return qi_make_table(state, table);
 }
 
+qi_value_t *qi_builtin_get_rlimit(qi_state_t *state, qi_size_t pargc,
+                                  qi_list_t *pargs) {
+  return qi_make_number(state, state->rlimit);
+}
+
+qi_value_t *qi_builtin_set_rlimit(qi_state_t *state, qi_size_t pargc,
+                                  qi_list_t *pargs) {
+  qi_value_t *a = qi_list_data(pargs, 0);
+
+  if (a->type != QI_NUMBER)
+    qi_throw_format(state,
+                    "expected first argument to be: number, but got: %s",
+                    _qi_type(state, a));
+
+  state->rlimit = (size_t)a->value.number;
+
+  return state->nil;
+}
+
 #define is_valid_mode(fmod)                                                    \
   (strcmp((fmod), "w") == 0 || strcmp((fmod), "r") == 0 ||                     \
    strcmp((fmod), "a") == 0 || strcmp((fmod), "a+") == 0 ||                    \
@@ -4147,6 +4166,9 @@ static void qi_state_setup(qi_state_t *state) {
   qi_add_builtin(state, "get_global", 1, qi_builtin_get_global);
   qi_add_builtin(state, "get_globals", 0, qi_builtin_get_globals);
 
+  qi_add_builtin(state, "get_rlimit", 0, qi_builtin_get_rlimit);
+  qi_add_builtin(state, "set_rlimit", 1, qi_builtin_set_rlimit);
+
   qi_add_builtin(state, "fopen", 2, qi_builtin_fopen);
   qi_add_builtin(state, "fread", 2, qi_builtin_fread);
   qi_add_builtin(state, "fgets", 2, qi_builtin_fgets);