mirror of
https://gitlab.freedesktop.org/plymouth/plymouth.git
synced 2026-05-11 05:48:24 +02:00
[script] Add SubString function to the script string library
Adds the SubString function which returns a string segment. The two paramiters are the sub-string start and end indicies. Negative start and end values return a NULL, as does start index being beyond the end index. Start being beyond the end of the string returns an empty string.
This commit is contained in:
parent
bb96d5ad12
commit
9b3a1b672b
1 changed files with 40 additions and 0 deletions
|
|
@ -25,6 +25,7 @@
|
|||
#include "script-execute.h"
|
||||
#include "script-object.h"
|
||||
#include "script-lib-string.h"
|
||||
#include "ply-utils.h"
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
|
@ -62,6 +63,38 @@ static script_return_t script_lib_string_char_at (script_state_t *state,
|
|||
return script_return_obj(script_obj_new_string (charstring));
|
||||
}
|
||||
|
||||
static script_return_t script_lib_string_sub_string (script_state_t *state,
|
||||
void *user_data)
|
||||
{
|
||||
char *text = script_obj_as_string (state->this);
|
||||
int start = script_obj_hash_get_number (state->local, "start");
|
||||
int end = script_obj_hash_get_number (state->local, "end");
|
||||
int text_count;
|
||||
char* substring;
|
||||
script_obj_t *substring_obj;
|
||||
|
||||
if (!text || start < 0 || end < start)
|
||||
{
|
||||
free (text);
|
||||
return script_return_obj_null ();
|
||||
}
|
||||
|
||||
for (text_count = 0; text_count < start; text_count++)
|
||||
{
|
||||
if (text[text_count] == '\0')
|
||||
{
|
||||
free (text);
|
||||
return script_return_obj(script_obj_new_string (""));
|
||||
}
|
||||
}
|
||||
|
||||
substring = strndup(&text[text_count], end - start);
|
||||
substring_obj = script_obj_new_string (substring);
|
||||
free (substring);
|
||||
free (text);
|
||||
return script_return_obj(substring_obj);
|
||||
}
|
||||
|
||||
script_lib_string_data_t *script_lib_string_setup (script_state_t *state)
|
||||
{
|
||||
script_lib_string_data_t *data = malloc (sizeof (script_lib_string_data_t));
|
||||
|
|
@ -73,6 +106,13 @@ script_lib_string_data_t *script_lib_string_setup (script_state_t *state)
|
|||
NULL,
|
||||
"index",
|
||||
NULL);
|
||||
script_add_native_function (string_hash,
|
||||
"SubString",
|
||||
script_lib_string_sub_string,
|
||||
NULL,
|
||||
"start",
|
||||
"end",
|
||||
NULL);
|
||||
script_obj_unref (string_hash);
|
||||
data->script_main_op = script_parse_string (script_lib_string_string, "script-lib-string.script");
|
||||
script_return_t ret = script_execute (state, data->script_main_op);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue