Skip to content

Commit fc03a89

Browse files
committed
feat(esp_linenoise): Update esp_linenoise_create_instance
1 parent e58c64e commit fc03a89

File tree

9 files changed

+50
-32
lines changed

9 files changed

+50
-32
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,5 @@ warnings.txt
1313
doxygen_output/
1414
**/docs/book/
1515
docs_build_output/
16+
pytest-args.txt
17+
build_info*.json

esp_linenoise/.build-test-rules.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@ esp_linenoise/test_apps:
33
- if: IDF_TARGET == "linux"
44
reason: "Sufficient to test on Linux target"
55
disable:
6-
- if: IDF_VERSION_MAJOR == 5 and IDF_VERSION_MINOR <= 4
6+
- if: IDF_VERSION_MAJOR <= 5 and IDF_VERSION_MINOR <= 4
77
reason: "those versions of esp-idf do not support eventfd for linux target"

esp_linenoise/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414
```c
1515
esp_linenoise_config_t config;
1616
esp_linenoise_get_instance_config_default(&config);
17-
esp_linenoise_handle_t handle = esp_linenoise_create_instance(&config);
17+
esp_linenoise_handle_t handle;
18+
const esp_err_t ret = esp_linenoise_create_instance(&config, &handle);
1819
const size_t buffer_size = 128;
1920
char buffer[128];
2021
const char *line = esp_linenoise_get_line(&handle, buffer, buffer_size);

esp_linenoise/include/esp_linenoise.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,9 +137,10 @@ void esp_linenoise_get_instance_config_default(esp_linenoise_config_t *config);
137137
* @brief Creates a new linenoise instance.
138138
*
139139
* @param config Pointer to the configuration parameters for the instance.
140-
* @return Handle to the created instance, or NULL on failure.
140+
* @param[out] out_handle Handle to the created instance, or NULL on failure.
141+
* @return ESP_OK if instance created successfully,
141142
*/
142-
esp_linenoise_handle_t esp_linenoise_create_instance(const esp_linenoise_config_t *config);
143+
esp_err_t esp_linenoise_create_instance(const esp_linenoise_config_t *config, esp_linenoise_handle_t *out_handle);
143144

144145
/**
145146
* @brief Destroys a linenoise instance and frees associated memory.

esp_linenoise/src/esp_linenoise.c

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1116,21 +1116,20 @@ void esp_linenoise_get_instance_config_default(esp_linenoise_config_t *config)
11161116
};
11171117
}
11181118

1119-
esp_linenoise_handle_t esp_linenoise_create_instance(const esp_linenoise_config_t *config)
1119+
esp_err_t esp_linenoise_create_instance(const esp_linenoise_config_t *config, esp_linenoise_handle_t *out_handle)
11201120
{
1121-
if (!config) {
1122-
return NULL;
1123-
}
1124-
1125-
esp_linenoise_instance_t *instance = malloc(sizeof(esp_linenoise_instance_t));
1126-
if (!instance) {
1127-
return NULL;
1121+
if (!config || !out_handle) {
1122+
return ESP_ERR_INVALID_ARG;
11281123
}
11291124

11301125
/* make sure the history is NULL since the linenoise library will allocate it */
11311126
if (config->history != NULL) {
1132-
free(instance);
1133-
return NULL;
1127+
return ESP_ERR_INVALID_ARG;
1128+
}
1129+
1130+
esp_linenoise_instance_t *instance = malloc(sizeof(esp_linenoise_instance_t));
1131+
if (!instance) {
1132+
return ESP_ERR_NO_MEM;
11341133
}
11351134

11361135
instance->config = *config;
@@ -1170,7 +1169,7 @@ esp_linenoise_handle_t esp_linenoise_create_instance(const esp_linenoise_config_
11701169
const esp_err_t ret_val = esp_linenoise_set_event_fd(instance);
11711170
if (ret_val != ESP_OK) {
11721171
free(instance);
1173-
return NULL;
1172+
return ret_val;
11741173
}
11751174
} else {
11761175
/* make sure the state->mux is set to NULL */
@@ -1196,9 +1195,11 @@ esp_linenoise_handle_t esp_linenoise_create_instance(const esp_linenoise_config_
11961195
instance->config.write_bytes_cb(instance->config.out_fd, buf, len);
11971196
}
11981197

1199-
/* set the self value to the handle of instance */
1198+
/* set the self value to the handle of instance and assign the instance to out_handle */
12001199
instance->self = instance;
1201-
return (esp_linenoise_handle_t)instance;
1200+
*out_handle = (esp_linenoise_handle_t)instance;
1201+
1202+
return ESP_OK;
12021203
}
12031204

12041205
esp_err_t esp_linenoise_delete_instance(esp_linenoise_handle_t handle)

esp_linenoise/test_apps/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required(VERSION 3.16)
1+
cmake_minimum_required(VERSION 3.22)
22

33
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
44
set(COMPONENTS main)

esp_linenoise/test_apps/main/test_esp_linenoise_behavioral.c

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ static void get_line_task(void *args)
153153
{
154154
get_line_args_t *task_args = (get_line_args_t *)args;
155155

156-
s_linenoise_hdl = esp_linenoise_create_instance(task_args->config);
156+
TEST_ASSERT_EQUAL(ESP_OK, esp_linenoise_create_instance(task_args->config, &s_linenoise_hdl));
157157
TEST_ASSERT_NOT_NULL(s_linenoise_hdl);
158158

159159
// wait for the instance to properly initialize before unlocking
@@ -613,7 +613,7 @@ TEST_CASE("CTRL-L clears the screen", "[esp_linenoise]")
613613
// we can check that the proper command was sent from
614614
// linenoise to the terminal
615615
// Verify prompt string is found in output
616-
wait_ms(50);
616+
wait_ms(100);
617617
char full_cmd_line[32] = {0};
618618
const char *expect_string = "screen cleared";
619619
const ssize_t nread = read(s_socket_fd_a[1], full_cmd_line, 32);
@@ -712,7 +712,7 @@ TEST_CASE("check esp_linenoise_get_line return values", "[esp_linenoise]")
712712

713713
test_instance_setup(s_socket_fd_a, &lock, &config);
714714

715-
s_linenoise_hdl = esp_linenoise_create_instance(&config);
715+
TEST_ASSERT_EQUAL(ESP_OK, esp_linenoise_create_instance(&config, &s_linenoise_hdl));
716716
TEST_ASSERT_NOT_NULL(s_linenoise_hdl);
717717

718718
const size_t buffer_size = 10;
@@ -762,7 +762,7 @@ TEST_CASE("check cmd line is bigger than the buffer", "[esp_linenoise]")
762762

763763
test_instance_setup(s_socket_fd_a, &lock, &config);
764764

765-
s_linenoise_hdl = esp_linenoise_create_instance(&config);
765+
TEST_ASSERT_EQUAL(ESP_OK, esp_linenoise_create_instance(&config, &s_linenoise_hdl));
766766
TEST_ASSERT_NOT_NULL(s_linenoise_hdl);
767767

768768
const size_t buffer_size = 10;
@@ -979,7 +979,8 @@ TEST_CASE("Create and use 2 esp_linenoise instances", "[esp_linenoise]")
979979
pthread_mutex_t lock_a = PTHREAD_MUTEX_INITIALIZER;
980980

981981
test_instance_setup(s_socket_fd_a, &lock_a, &config_a);
982-
esp_linenoise_handle_t linenoise_handle_a = esp_linenoise_create_instance(&config_a);
982+
esp_linenoise_handle_t linenoise_handle_a;
983+
TEST_ASSERT_EQUAL(ESP_OK, esp_linenoise_create_instance(&config_a, &linenoise_handle_a));
983984
TEST_ASSERT_NOT_NULL(linenoise_handle_a);
984985

985986
const size_t buffer_a_size = 32;
@@ -1001,7 +1002,8 @@ TEST_CASE("Create and use 2 esp_linenoise instances", "[esp_linenoise]")
10011002
pthread_mutex_t lock_b = PTHREAD_MUTEX_INITIALIZER;
10021003

10031004
test_instance_setup(s_socket_fd_b, &lock_b, &config_b);
1004-
esp_linenoise_handle_t linenoise_handle_b = esp_linenoise_create_instance(&config_b);
1005+
esp_linenoise_handle_t linenoise_handle_b;
1006+
TEST_ASSERT_EQUAL(ESP_OK, esp_linenoise_create_instance(&config_b, &linenoise_handle_b));
10051007
TEST_ASSERT_NOT_NULL(linenoise_handle_b);
10061008

10071009
const size_t buffer_b_size = 32;
@@ -1053,7 +1055,8 @@ TEST_CASE("tests that esp_linenoise_abort actually forces esp_linenoise_get_line
10531055
config_a.read_bytes_cb = NULL;
10541056
config_b.read_bytes_cb = NULL;
10551057

1056-
esp_linenoise_handle_t linenoise_handle_a = esp_linenoise_create_instance(&config_a);
1058+
esp_linenoise_handle_t linenoise_handle_a;
1059+
TEST_ASSERT_EQUAL(ESP_OK, esp_linenoise_create_instance(&config_a, &linenoise_handle_a));
10571060
TEST_ASSERT_NOT_NULL(linenoise_handle_a);
10581061

10591062
const size_t buffer_a_size = 32;
@@ -1071,7 +1074,8 @@ TEST_CASE("tests that esp_linenoise_abort actually forces esp_linenoise_get_line
10711074
xTaskCreate(get_line_task_w_args, "freertos_task", 2048, &args_a, 5, NULL);
10721075
pthread_mutex_lock(&lock_a);
10731076

1074-
esp_linenoise_handle_t linenoise_handle_b = esp_linenoise_create_instance(&config_b);
1077+
esp_linenoise_handle_t linenoise_handle_b;
1078+
TEST_ASSERT_EQUAL(ESP_OK, esp_linenoise_create_instance(&config_b, &linenoise_handle_b));
10751079
TEST_ASSERT_NOT_NULL(linenoise_handle_b);
10761080

10771081
const size_t buffer_b_size = 32;

esp_linenoise/test_apps/main/test_esp_linenoise_get_set.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ static esp_linenoise_handle_t get_linenoise_instance_default_config(void)
1414
{
1515
esp_linenoise_config_t config;
1616
esp_linenoise_get_instance_config_default(&config);
17-
esp_linenoise_handle_t h = esp_linenoise_create_instance(&config);
17+
esp_linenoise_handle_t h;
18+
TEST_ASSERT_EQUAL(ESP_OK, esp_linenoise_create_instance(&config, &h));
1819
TEST_ASSERT_NOT_NULL(h);
1920
return h;
2021
}
Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,16 @@
11
import pytest
2+
from pytest_embedded import Dut
3+
from pytest_embedded_idf.utils import idf_parametrize
4+
import glob
5+
from pathlib import Path
26

3-
@pytest.mark.generic
4-
@pytest.mark.parametrize(
5-
'target', ['linux'], indirect=['target'])
6-
@pytest.mark.skip_if_soc("IDF_VERSION_MAJOR < 5 and IDF_VERSION_MINOR <= 4")
7-
def test_esp_linenoise(dut) -> None:
7+
8+
9+
@pytest.mark.host_test
10+
@pytest.mark.skipif(
11+
not bool(glob.glob(f'{Path(__file__).parent.absolute()}/build*/')),
12+
reason="Skip the idf version that did not build"
13+
)
14+
@idf_parametrize('target', ['linux'], indirect=['target'])
15+
def test_esp_linenoise(dut: Dut) -> None:
816
dut.run_all_single_board_cases()

0 commit comments

Comments
 (0)