Skip to content

Commit ab29806

Browse files
committed
internal improvements
1 parent 98677cf commit ab29806

1 file changed

Lines changed: 36 additions & 15 deletions

File tree

src/scriptexec.c

Lines changed: 36 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88

99
// private functions
1010
struct ScriptExecResult create_result();
11-
char *read_text_file(char *, struct StringBuffer *);
11+
bool write_text_file(char *, const char *);
12+
char *read_and_delete_text_file(char *, struct StringBuffer *);
1213

1314
struct ScriptExecOptions scriptexec_create_options()
1415
{
@@ -40,8 +41,7 @@ struct ScriptExecResult scriptexec_run_with_options(const char *script, struct S
4041
}
4142

4243
const size_t script_length = strlen(script);
43-
struct StringBuffer *buffer = string_buffer_new_with_options(
44-
script_length + 4096, true);
44+
struct StringBuffer *buffer = string_buffer_new_with_options(script_length + 4096, true);
4545

4646
// move to cwd
4747
char *cwd = getcwd(NULL, 0);
@@ -71,13 +71,14 @@ struct ScriptExecResult scriptexec_run_with_options(const char *script, struct S
7171
string_buffer_append_string(buffer, (char *)script);
7272
const char *updated_script = string_buffer_to_string(buffer);
7373

74-
char template[] = "/tmp/tmpdir.XXXXXX";
74+
char template[] = "/tmp/scriptexec_XXXXXX";
7575
char *dir_name = mkdtemp(template);
7676

7777
if (dir_name == NULL)
7878
{
79-
result.code = -1;
8079
string_buffer_release(buffer);
80+
81+
result.code = -1;
8182
return(result);
8283
}
8384

@@ -86,8 +87,6 @@ struct ScriptExecResult scriptexec_run_with_options(const char *script, struct S
8687
string_buffer_append_string(buffer, "/script");
8788
char *script_file = string_buffer_to_string(buffer);
8889

89-
string_buffer_clear(buffer);
90-
string_buffer_append_string(buffer, script_file);
9190
string_buffer_append_string(buffer, ".out");
9291
char *out_file = string_buffer_to_string(buffer);
9392

@@ -97,15 +96,14 @@ struct ScriptExecResult scriptexec_run_with_options(const char *script, struct S
9796
char *err_file = string_buffer_to_string(buffer);
9897

9998
// write script file
100-
FILE *fp = fopen(script_file, "w");
101-
if (fp == NULL)
99+
if (!write_text_file(script_file, updated_script))
102100
{
103-
result.code = -1;
101+
rmdir(dir_name);
104102
string_buffer_release(buffer);
103+
104+
result.code = -1;
105105
return(result);
106106
}
107-
fprintf(fp, "%s", updated_script);
108-
fclose(fp);
109107

110108
// create command
111109
char *runner = options.runner;
@@ -126,8 +124,8 @@ struct ScriptExecResult scriptexec_run_with_options(const char *script, struct S
126124
result.code = system(command);
127125

128126
// read out/err
129-
result.out = read_text_file(out_file, buffer);
130-
result.err = read_text_file(err_file, buffer);
127+
result.out = read_and_delete_text_file(out_file, buffer);
128+
result.err = read_and_delete_text_file(err_file, buffer);
131129

132130
// delete files
133131
remove(script_file);
@@ -146,7 +144,30 @@ struct ScriptExecResult create_result()
146144
}
147145

148146

149-
char *read_text_file(char *file, struct StringBuffer *buffer)
147+
bool write_text_file(char *file, const char *text)
148+
{
149+
FILE *fp = fopen(file, "w");
150+
151+
if (fp == NULL)
152+
{
153+
return(false);
154+
}
155+
156+
if (fputs(text, fp) == EOF)
157+
{
158+
fclose(fp);
159+
remove(file);
160+
161+
return(false);
162+
}
163+
164+
fclose(fp);
165+
166+
return(true);
167+
}
168+
169+
170+
char *read_and_delete_text_file(char *file, struct StringBuffer *buffer)
150171
{
151172
FILE *fp = fopen(file, "r");
152173

0 commit comments

Comments
 (0)