From c68e06a88b094a1ff883c8aa419ec318352efb22 Mon Sep 17 00:00:00 2001 From: Denis Date: Tue, 20 Feb 2024 02:02:40 +0100 Subject: [PATCH] moved inline_read_file and inline_write_file --- rog_ally.c | 99 ++++----------------------------------------------- rogue_enemy.c | 86 +++++++++++++++++++++++++++++++++++++++++++- rogue_enemy.h | 6 +++- 3 files changed, 97 insertions(+), 94 deletions(-) diff --git a/rog_ally.c b/rog_ally.c index 6915c6a..c01ca7d 100644 --- a/rog_ally.c +++ b/rog_ally.c @@ -1577,91 +1577,6 @@ typedef struct dev_iio { double accel_sampling_rate_hz; } dev_old_iio_t; - -static char* read_file(const char* base_path, const char *file) { - char* res = NULL; - char* fdir = NULL; - long len = 0; - - len = strlen(base_path) + strlen(file) + 1; - fdir = malloc(len); - if (fdir == NULL) { - fprintf(stderr, "Cannot allocate %ld bytes for device path, device skipped.\n", len); - goto read_file_err; - } - strcpy(fdir, base_path); - strcat(fdir, file); - - if (access(fdir, F_OK) == 0) { - FILE* fp = fopen(fdir, "r"); - if (fp != NULL) { - fseek(fp, 0L, SEEK_END); - len = ftell(fp); - rewind(fp); - - len += 1; - res = malloc(len); - if (res != NULL) { - unsigned long read_bytes = fread(res, 1, len, fp); - printf("Read %lu bytes from file %s\n", read_bytes, fdir); - } else { - fprintf(stderr, "Cannot allocate %ld bytes for %s content.\n", len, fdir); - } - - fclose(fp); - } else { - fprintf(stderr, "Cannot open file %s.\n", fdir); - } - } else { - fprintf(stderr, "File %s does not exists.\n", fdir); - } - - free(fdir); - fdir = NULL; - -read_file_err: - return res; -} - -static int inline_write_file(const char* base_path, const char *file, const void* buf, size_t buf_sz) { - char* fdir = NULL; - - int res = 0; - - const size_t len = strlen(base_path) + strlen(file) + 1; - fdir = malloc(len); - if (fdir == NULL) { - fprintf(stderr, "Cannot allocate %ld bytes for device path, device skipped.\n", len); - goto inline_write_file_err; - } - strcpy(fdir, base_path); - strcat(fdir, file); - - if (access(fdir, F_OK) == 0) { - FILE* fp = fopen(fdir, "w"); - if (fp != NULL) { - res = fwrite(buf, 1, buf_sz, fp); - if (res >= buf_sz) { - printf("Written %d bytes to file %s\n", res, fdir); - } else { - fprintf(stderr, "Cannot write to %s: %d.\n", fdir, res); - } - - fclose(fp); - } else { - fprintf(stderr, "Cannot open file %s.\n", fdir); - } - } else { - fprintf(stderr, "File %s does not exists.\n", fdir); - } - - free(fdir); - fdir = NULL; - -inline_write_file_err: - return res; -} - static dev_old_iio_t* dev_old_iio_create(const char* path) { dev_old_iio_t *iio = malloc(sizeof(dev_old_iio_t)); if (iio == NULL) { @@ -1707,7 +1622,7 @@ static dev_old_iio_t* dev_old_iio_create(const char* path) { strcpy(iio->path, path); // ============================================= DEVICE NAME ================================================ - iio->name = read_file(iio->path, "/name"); + iio->name = inline_read_file(iio->path, "/name"); if (iio->name == NULL) { fprintf(stderr, "Unable to read iio device name.\n"); free(iio); @@ -1726,7 +1641,7 @@ static dev_old_iio_t* dev_old_iio_create(const char* path) { const char* preferred_scale = LSB_PER_RAD_S_2000_DEG_S_STR; const char *scale_main_file = "/in_anglvel_scale"; - char* const anglvel_scale = read_file(iio->path, scale_main_file); + char* const anglvel_scale = inline_read_file(iio->path, scale_main_file); if (anglvel_scale != NULL) { iio->anglvel_scale_x = iio->anglvel_scale_y = iio->anglvel_scale_z = strtod(anglvel_scale, NULL); free((void*)anglvel_scale); @@ -1753,7 +1668,7 @@ static dev_old_iio_t* dev_old_iio_create(const char* path) { const char* preferred_scale = LSB_PER_16G_STR; const char *scale_main_file = "/in_accel_scale"; - char* const accel_scale = read_file(iio->path, scale_main_file); + char* const accel_scale = inline_read_file(iio->path, scale_main_file); if (accel_scale != NULL) { iio->accel_scale_x = iio->accel_scale_y = iio->accel_scale_z = strtod(accel_scale, NULL); free((void*)accel_scale); @@ -1777,7 +1692,7 @@ static dev_old_iio_t* dev_old_iio_create(const char* path) { // ============================================= temp_scale ================================================= { - char* const accel_scale = read_file(iio->path, "/in_temp_scale"); + char* const accel_scale = inline_read_file(iio->path, "/in_temp_scale"); if (accel_scale != NULL) { iio->temp_scale = strtod(accel_scale, NULL); free((void*)accel_scale); @@ -1796,7 +1711,7 @@ static dev_old_iio_t* dev_old_iio_create(const char* path) { const char* preferred_scale = PREFERRED_SAMPLING_FREQ_STR; const char *scale_main_file = "/in_anglvel_sampling_frequency"; - char* const accel_scale = read_file(iio->path, scale_main_file); + char* const accel_scale = inline_read_file(iio->path, scale_main_file); if (accel_scale != NULL) { iio->anglvel_sampling_rate_hz = strtod(accel_scale, NULL); free((void*)accel_scale); @@ -1822,7 +1737,7 @@ static dev_old_iio_t* dev_old_iio_create(const char* path) { const char* preferred_scale = PREFERRED_SAMPLING_FREQ_STR; const char *scale_main_file = "/in_accel_sampling_frequency"; - char* const accel_scale = read_file(iio->path, scale_main_file); + char* const accel_scale = inline_read_file(iio->path, scale_main_file); if (accel_scale != NULL) { iio->accel_sampling_rate_hz = strtod(accel_scale, NULL); free((void*)accel_scale); @@ -2135,7 +2050,7 @@ input_dev_composite_t rc71l_composite = { input_dev_composite_t* rog_ally_device_def(const dev_in_settings_t *const conf) { if (conf->enable_imu) { - bmc150_timer_data.name = read_file(iio_base_path, "name"); + bmc150_timer_data.name = inline_read_file(iio_base_path, "name"); if ((bmc150_timer_data.name != NULL) && (strcmp(bmc150_timer_data.name, "bmi323"))) { printf("Old bmc150-accel-i2c for bmi323 device has been selected! Are you running a neptune kernel?\n"); rc71l_composite.dev[rc71l_composite.dev_count++] = &bmc150_timer_dev; diff --git a/rogue_enemy.c b/rogue_enemy.c index 31be1db..4f7fe04 100644 --- a/rogue_enemy.c +++ b/rogue_enemy.c @@ -41,4 +41,88 @@ int dmi_name_fd = open("/sys/class/dmi/id/board_name", O_RDONLY | O_NONBLOCK); close(dmi_name_fd); return ret; -} \ No newline at end of file +} + +char* inline_read_file(const char* base_path, const char *file) { + char* res = NULL; + char* fdir = NULL; + long len = 0; + + len = strlen(base_path) + strlen(file) + 1; + fdir = malloc(len); + if (fdir == NULL) { + fprintf(stderr, "Cannot allocate %ld bytes for device path, device skipped.\n", len); + goto read_file_err; + } + strcpy(fdir, base_path); + strcat(fdir, file); + + if (access(fdir, F_OK) == 0) { + FILE* fp = fopen(fdir, "r"); + if (fp != NULL) { + fseek(fp, 0L, SEEK_END); + len = ftell(fp); + rewind(fp); + + len += 1; + res = malloc(len); + if (res != NULL) { + unsigned long read_bytes = fread(res, 1, len, fp); + printf("Read %lu bytes from file %s\n", read_bytes, fdir); + } else { + fprintf(stderr, "Cannot allocate %ld bytes for %s content.\n", len, fdir); + } + + fclose(fp); + } else { + fprintf(stderr, "Cannot open file %s.\n", fdir); + } + } else { + fprintf(stderr, "File %s does not exists.\n", fdir); + } + + free(fdir); + fdir = NULL; + +read_file_err: + return res; +} + +int inline_write_file(const char* base_path, const char *file, const void* buf, size_t buf_sz) { + char* fdir = NULL; + + int res = 0; + + const size_t len = strlen(base_path) + strlen(file) + 1; + fdir = malloc(len); + if (fdir == NULL) { + fprintf(stderr, "Cannot allocate %ld bytes for device path, device skipped.\n", len); + goto inline_write_file_err; + } + strcpy(fdir, base_path); + strcat(fdir, file); + + if (access(fdir, F_OK) == 0) { + FILE* fp = fopen(fdir, "w"); + if (fp != NULL) { + res = fwrite(buf, 1, buf_sz, fp); + if (res >= buf_sz) { + printf("Written %d bytes to file %s\n", res, fdir); + } else { + fprintf(stderr, "Cannot write to %s: %d.\n", fdir, res); + } + + fclose(fp); + } else { + fprintf(stderr, "Cannot open file %s.\n", fdir); + } + } else { + fprintf(stderr, "File %s does not exists.\n", fdir); + } + + free(fdir); + fdir = NULL; + +inline_write_file_err: + return res; +} diff --git a/rogue_enemy.h b/rogue_enemy.h index 4b2d85b..2b2e450 100644 --- a/rogue_enemy.h +++ b/rogue_enemy.h @@ -69,4 +69,8 @@ int64_t min_max_clamp(int64_t value, int64_t min, int64_t max); int64_t absolute_value(int64_t value); -ssize_t dmi_board_name(char *const buf, size_t buf_len); \ No newline at end of file +ssize_t dmi_board_name(char *const buf, size_t buf_len); + +char* inline_read_file(const char* base_path, const char *file); + +int inline_write_file(const char* base_path, const char *file, const void* buf, size_t buf_sz); \ No newline at end of file