Skip to content

Commit 3f968b0

Browse files
committed
add quiz/set_env_from_file
1 parent e75e08b commit 3f968b0

File tree

4 files changed

+65
-0
lines changed

4 files changed

+65
-0
lines changed

quiz/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ add_test(longest_symmetrical_length longest_symmetrical_length.cpp)
99
add_test(magic_square magic_square.cpp)
1010
add_test(null_obj null_obj.cpp)
1111
add_test(reverse_words_in_sentence reverse_words_in_sentence.cpp)
12+
add_test(set_env_from_file set_env_from_file_test.cpp set_env_from_file.c)
1213
add_test(shared_ptr shared_ptr.cpp)
1314
add_test(sort_list_and_remove_dup sort_list_and_remove_dup.cpp)
1415

quiz/set_env_from_file.c

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
#include <string.h>
4+
5+
#include "set_env_from_file.h"
6+
7+
#define MAX_LINE_LENGTH 256
8+
9+
bool set_env_from_file(const char *filename)
10+
{
11+
FILE *file = fopen(filename, "r");
12+
if (!file) {
13+
return false;
14+
}
15+
char line[MAX_LINE_LENGTH];
16+
char *saveptr;
17+
while (fgets(line, sizeof(line), file)) {
18+
char *key = strtok_r(line, "=", &saveptr);
19+
char *value = strtok_r(NULL, "\n", &saveptr);
20+
if (key && value) {
21+
setenv(key, value, 1);
22+
}
23+
}
24+
fclose(file);
25+
return true;
26+
}

quiz/set_env_from_file.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#ifndef _QUIZ_SET_ENV_FROM_FILE_H_
2+
#define _QUIZ_SET_ENV_FROM_FILE_H_
3+
4+
#include <stdbool.h>
5+
6+
#ifdef __cplusplus
7+
extern "C" {
8+
#endif
9+
10+
bool set_env_from_file(const char *filename);
11+
12+
#ifdef __cplusplus
13+
}
14+
#endif
15+
16+
#endif /* _QUIZ_SET_ENV_FROM_FILE_H_ */

quiz/set_env_from_file_test.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
2+
#include "doctest/doctest.h"
3+
4+
#include <cstdlib>
5+
#include <fstream>
6+
7+
#include "set_env_from_file.h"
8+
9+
#define FILE_NAME "set_env_from_file_test.dat"
10+
11+
TEST_CASE("Test set_env_from_file()")
12+
{
13+
std::ofstream file(FILE_NAME);
14+
CHECK(file);
15+
file << "TEST_ENV=test_string" << std::endl;
16+
file.close();
17+
CHECK(set_env_from_file(FILE_NAME));
18+
const char *v = getenv("TEST_ENV");
19+
CHECK(v != NULL);
20+
CHECK(strcmp(v, "test_string") == 0);
21+
std::remove(FILE_NAME);
22+
}

0 commit comments

Comments
 (0)