Convert tix to C.

This commit is contained in:
Jonas 'Sortie' Termansen 2016-02-29 00:10:59 +01:00
parent 423285b855
commit 1cc29fe0ee
11 changed files with 123 additions and 105 deletions

View File

@ -4,10 +4,14 @@ include ../build-aux/version.mak
include ../build-aux/dirs.mak
OPTLEVEL?=$(DEFAULT_OPTLEVEL)
CXXFLAGS?=$(OPTLEVEL)
CFLAGS?=$(OPTLEVEL)
CFLAGS:=$(CFLAGS) -Wall -Wextra
CPPFLAGS:=$(CPPFLAGS) -DVERSIONSTR=\"$(VERSION)\"
CXXFLAGS:=$(CXXFLAGS) -Wall -Wextra -fno-exceptions -fno-rtti
ifeq ($(HOST_IS_SORTIX),0)
CPPFLAGS+=-D_GNU_SOURCE
endif
BINARIES:=\
porttix-create \
@ -28,8 +32,8 @@ all: $(PROGRAMS)
.PHONY: all install clean
%: %.cpp util.h
$(CXX) -std=gnu++11 $(CPPFLAGS) $(CXXFLAGS) $< -o $@
%: %.c util.h
$(CC) -std=gnu11 $(CFLAGS) $(CPPFLAGS) $< -o $@
$(DESTDIR)$(SBINDIR):
mkdir -p $@

View File

@ -17,14 +17,11 @@
You should have received a copy of the GNU General Public License along with
Tix. If not, see <https://www.gnu.org/licenses/>.
porttix-create.cpp
porttix-create.c
Creates a port tix by generating patches using source code and tarballs.
*******************************************************************************/
#define __STDC_CONSTANT_MACROS
#define __STDC_LIMIT_MACROS
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
@ -37,6 +34,7 @@
#include <libgen.h>
#include <signal.h>
#include <stdarg.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
@ -45,7 +43,7 @@
#include "util.h"
int redirect(const char* path, int flags, mode_t mode = 0)
int redirect(const char* path, int flags, mode_t mode)
{
int fd = open(path, flags, mode);
if ( fd < 0 )
@ -87,7 +85,8 @@ int main(int argc, char* argv[])
break;
if ( arg[1] != '-' )
{
while ( char c = *++arg ) switch ( c )
char c;
while ( (c = *++arg) ) switch ( c )
{
default:
fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, c);
@ -362,7 +361,7 @@ int main(int argc, char* argv[])
// Create the patch between the source tix and the normalized tree.
char* patch_path = join_paths(porttix_path, "patch.patch");
if ( fork_and_wait_or_death(false) )
if ( fork_and_wait_or_death_def(false) )
{
close(1);
if ( open(patch_path, O_WRONLY | O_CREAT | O_TRUNC, 0644) != 1 )
@ -387,7 +386,7 @@ int main(int argc, char* argv[])
// Created the execpatch between the source tix and the normalized tree.
char* patch_exec_path = join_paths(porttix_path, "patch.execpatch");
if ( fork_and_wait_or_death(false) )
if ( fork_and_wait_or_death_def(false) )
{
if ( redirect(patch_exec_path, O_WRONLY | O_CREAT | O_TRUNC, 0644) != 0 )
error(1, errno, "`%s'", patch_exec_path);

View File

@ -17,14 +17,11 @@
You should have received a copy of the GNU General Public License along with
Tix. If not, see <https://www.gnu.org/licenses/>.
srctix-create.cpp
srctix-create.c
Converts an archived port tix into an archived source tix.
*******************************************************************************/
#define __STDC_CONSTANT_MACROS
#define __STDC_LIMIT_MACROS
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
@ -37,6 +34,7 @@
#include <libgen.h>
#include <signal.h>
#include <stdarg.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
@ -81,7 +79,8 @@ int main(int argc, char* argv[])
break;
if ( arg[1] != '-' )
{
while ( char c = *++arg ) switch ( c )
char c;
while ( (c = *++arg) ) switch ( c )
{
default:
fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, c);

View File

@ -17,14 +17,11 @@
You should have received a copy of the GNU General Public License along with
Tix. If not, see <https://www.gnu.org/licenses/>.
tix-build.cpp
tix-build.c
Compile a source tix into a tix suitable for installation.
*******************************************************************************/
#define __STDC_CONSTANT_MACROS
#define __STDC_LIMIT_MACROS
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
@ -38,6 +35,7 @@
#include <limits.h>
#include <signal.h>
#include <stdarg.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
@ -342,9 +340,9 @@ void SetNeedVariableBuildTool(metainfo_t* minfo,
const char* value)
{
string_array_t* pkg_info = &minfo->package_info;
const char* needed_vars = dictionary_get(pkg_info, "pkg.make.needed-vars", "true");
const char* needed_vars = dictionary_get_def(pkg_info, "pkg.make.needed-vars", "true");
char* key = print_string("pkg.make.needed-vars.%s", variable);
const char* needed_var = dictionary_get(pkg_info, key, needed_vars);
const char* needed_var = dictionary_get_def(pkg_info, key, needed_vars);
free(key);
if ( !parse_boolean(needed_var) )
return;
@ -398,25 +396,25 @@ void SetNeededVariables(metainfo_t* minfo)
SetNeedVariableCrossTool(minfo, "STRIP", "strip");
}
void Configure(metainfo_t* minfo, const char* subdir = NULL)
void Configure(metainfo_t* minfo, const char* subdir)
{
if ( fork_and_wait_or_recovery() )
{
string_array_t* pkg_info = &minfo->package_info;
const char* configure_raw =
dictionary_get(pkg_info, "pkg.configure.cmd", "./configure");
dictionary_get_def(pkg_info, "pkg.configure.cmd", "./configure");
char* configure;
if ( strcmp(minfo->build_dir, minfo->package_dir) == 0 )
configure = strdup(configure_raw);
else
configure = print_string("%s/%s", minfo->package_dir, configure_raw);
const char* conf_extra_args =
dictionary_get(pkg_info, "pkg.configure.args", "");
dictionary_get_def(pkg_info, "pkg.configure.args", "");
const char* conf_extra_vars =
dictionary_get(pkg_info, "pkg.configure.vars", "");
dictionary_get_def(pkg_info, "pkg.configure.vars", "");
bool with_sysroot =
parse_boolean(dictionary_get(pkg_info, "pkg.configure.with-sysroot",
"false"));
parse_boolean(dictionary_get_def(pkg_info, "pkg.configure.with-sysroot",
"false"));
// After releasing Sortix 1.0, remove this and hard-code the default to
// false. This allows building Sortix 0.9 with its own ports using this
// tix-build version.
@ -425,11 +423,11 @@ void Configure(metainfo_t* minfo, const char* subdir = NULL)
!strcmp(minfo->package_name, "gcc") )
with_sysroot_ld_bug_default = "true";
bool with_sysroot_ld_bug =
parse_boolean(dictionary_get(pkg_info, "pkg.configure.with-sysroot-ld-bug",
with_sysroot_ld_bug_default ));
parse_boolean(dictionary_get_def(pkg_info, "pkg.configure.with-sysroot-ld-bug",
with_sysroot_ld_bug_default ));
bool with_build_sysroot =
parse_boolean(dictionary_get(pkg_info, "pkg.configure.with-build-sysroot",
"false"));
parse_boolean(dictionary_get_def(pkg_info, "pkg.configure.with-build-sysroot",
"false"));
if ( chdir(minfo->build_dir) != 0 )
error(1, errno, "chdir: `%s'", minfo->build_dir);
if ( subdir && chdir(subdir) != 0 )
@ -509,7 +507,7 @@ bool TestDirty(metainfo_t* minfo,
return result;
}
bool IsDirty(metainfo_t* minfo, const char* subdir = NULL)
bool IsDirty(metainfo_t* minfo, const char* subdir)
{
string_array_t* pkg_info = &minfo->package_info;
const char* dirty_file = dictionary_get(pkg_info, "pkg.dirty-file");
@ -520,18 +518,17 @@ bool IsDirty(metainfo_t* minfo, const char* subdir = NULL)
TestDirty(minfo, subdir, "makefile");
}
void Make(metainfo_t* minfo, const char* make_target,
const char* destdir = NULL, bool die_on_error = true,
const char* subdir = NULL)
void Make(metainfo_t* minfo, const char* make_target, const char* destdir,
bool die_on_error, const char* subdir)
{
if ( (!die_on_error && fork_and_wait_or_death(die_on_error)) ||
if ( (!die_on_error && fork_and_wait_or_death_def(die_on_error)) ||
(die_on_error && fork_and_wait_or_recovery()) )
{
string_array_t* pkg_info = &minfo->package_info;
char* make = strdup(minfo->make);
const char* override_make = dictionary_get(pkg_info, "pkg.make.cmd");
const char* make_extra_args = dictionary_get(pkg_info, "pkg.make.args", "");
const char* make_extra_vars = dictionary_get(pkg_info, "pkg.make.vars", "");
const char* make_extra_args = dictionary_get_def(pkg_info, "pkg.make.args", "");
const char* make_extra_vars = dictionary_get_def(pkg_info, "pkg.make.vars", "");
if ( override_make )
{
free(make);
@ -605,7 +602,7 @@ void BuildPackage(metainfo_t* minfo)
// Determine whether need to do an out-of-directory build.
const char* use_build_dir_var =
dictionary_get(pinfo, "pkg.configure.use-build-directory", "false");
dictionary_get_def(pinfo, "pkg.configure.use-build-directory", "false");
bool use_build_dir = parse_boolean(use_build_dir_var);
if ( use_build_dir )
{
@ -620,18 +617,18 @@ void BuildPackage(metainfo_t* minfo)
// Reset the build directory if needed.
const char* default_clean_target =
!strcmp(build_system, "configure") ? "distclean" : "clean";
const char* clean_target = dictionary_get(pinfo, "pkg.make.clean-target",
default_clean_target);
const char* clean_target = dictionary_get_def(pinfo, "pkg.make.clean-target",
default_clean_target);
const char* ignore_clean_failure_var =
dictionary_get(pinfo, "pkg.make.ignore-clean-failure", "true");
dictionary_get_def(pinfo, "pkg.make.ignore-clean-failure", "true");
bool ignore_clean_failure = parse_boolean(ignore_clean_failure_var);
const char* subdir = dictionary_get(pinfo, "pkg.subdir", NULL);
const char* subdir = dictionary_get(pinfo, "pkg.subdir");
if ( SHOULD_DO_BUILD_STEP(BUILD_STEP_PRE_CLEAN, minfo) &&
!use_build_dir &&
IsDirty(minfo) )
Make(minfo, clean_target, NULL, !ignore_clean_failure);
IsDirty(minfo, NULL) )
Make(minfo, clean_target, NULL, !ignore_clean_failure, NULL);
// Configure the build directory if needed.
if ( strcmp(build_system, "configure") == 0 &&
@ -639,10 +636,10 @@ void BuildPackage(metainfo_t* minfo)
Configure(minfo, subdir);
bool location_independent =
parse_boolean(dictionary_get(pinfo, "pkg.location-independent", "false"));
parse_boolean(dictionary_get_def(pinfo, "pkg.location-independent", "false"));
const char* build_target = dictionary_get(pinfo, "pkg.make.build-target", "all");
const char* install_target = dictionary_get(pinfo, "pkg.make.install-target", "install");
const char* build_target = dictionary_get_def(pinfo, "pkg.make.build-target", "all");
const char* install_target = dictionary_get_def(pinfo, "pkg.make.install-target", "install");
if ( !location_independent && !minfo->prefix )
error(1, 0, "error: %s is not location independent and you need to "
@ -770,7 +767,7 @@ void BuildPackage(metainfo_t* minfo)
// Clean the build directory after the successful build.
if ( SHOULD_DO_BUILD_STEP(BUILD_STEP_POST_CLEAN, minfo) )
Make(minfo, clean_target, NULL, !ignore_clean_failure);
Make(minfo, clean_target, NULL, !ignore_clean_failure, NULL);
}
void VerifySourceTixInformation(metainfo_t* minfo)
@ -797,7 +794,7 @@ void VerifySourceTixInformation(metainfo_t* minfo)
// but instead consider them normal characters. This should work as
// expected, though, as long as the MAKEFLAGS variable doesn't contain any
// quote characters.
void PurifyMakeflags()
void PurifyMakeflags(void)
{
const char* makeflags_environment = getenv("MAKEFLAGS");
if ( !makeflags_environment )
@ -872,7 +869,8 @@ int main(int argc, char* argv[])
break;
if ( arg[1] != '-' )
{
while ( char c = *++arg ) switch ( c )
char c;
while ( (c = *++arg) ) switch ( c )
{
default:
fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, c);
@ -979,7 +977,8 @@ int main(int argc, char* argv[])
minfo.package_info_path = print_string("%s/tixbuildinfo",
minfo.package_dir);
string_array_t* package_info = &(minfo.package_info = string_array_make());
minfo.package_info = string_array_make();
string_array_t* package_info = &minfo.package_info;
if ( !dictionary_append_file_path(package_info, minfo.package_info_path) )
{
if ( errno == ENOENT )

View File

@ -17,14 +17,11 @@
You should have received a copy of the GNU General Public License along with
Tix. If not, see <https://www.gnu.org/licenses/>.
tix-collection.cpp
tix-collection.c
Administer and configure a tix collection.
*******************************************************************************/
#define __STDC_CONSTANT_MACROS
#define __STDC_LIMIT_MACROS
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
@ -36,6 +33,7 @@
#include <fcntl.h>
#include <signal.h>
#include <stdarg.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
@ -87,7 +85,8 @@ int main(int argc, char* argv[])
break;
if ( arg[1] != '-' )
{
while ( char c = *++arg ) switch ( c )
char c;
while ( (c = *++arg) ) switch ( c )
{
default:
fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, c);

View File

@ -17,14 +17,11 @@
You should have received a copy of the GNU General Public License along with
Tix. If not, see <https://www.gnu.org/licenses/>.
tix-execdiff.cpp
tix-execdiff.c
Reports which files have had the executable bit changed between two trees.
*******************************************************************************/
#define __STDC_CONSTANT_MACROS
#define __STDC_LIMIT_MACROS
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
@ -37,6 +34,7 @@
#include <libgen.h>
#include <signal.h>
#include <stdarg.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
@ -78,7 +76,8 @@ void execdiff(int tree_a, const char* tree_a_path,
DIR* dir_b = fdopendupdir(tree_b);
if ( !dir_b )
error(1, errno, "fdopendupdir(`%s`)", tree_b_path);
while ( struct dirent* entry = readdir(dir_b) )
struct dirent* entry;
while ( (entry = readdir(dir_b)) )
{
if ( !strcmp(entry->d_name, ".") || !strcmp(entry->d_name, "..") )
continue;
@ -172,7 +171,8 @@ int main(int argc, char* argv[])
break;
if ( arg[1] != '-' )
{
while ( char c = *++arg ) switch ( c )
char c;
while ( (c = *++arg) ) switch ( c )
{
default:
fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, c);

View File

@ -17,14 +17,11 @@
You should have received a copy of the GNU General Public License along with
Tix. If not, see <https://www.gnu.org/licenses/>.
tix-execpatch.cpp
tix-execpatch.c
Patches the executable bits of files in the current source directory.
*******************************************************************************/
#define __STDC_CONSTANT_MACROS
#define __STDC_LIMIT_MACROS
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
@ -38,6 +35,7 @@
#include <libgen.h>
#include <signal.h>
#include <stdarg.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
@ -203,7 +201,8 @@ int main(int argc, char* argv[])
break;
if ( arg[1] != '-' )
{
while ( char c = *++arg ) switch ( c )
char c;
while ( (c = *++arg) ) switch ( c )
{
case 'c': check = true; break;
default:

View File

@ -17,14 +17,11 @@
You should have received a copy of the GNU General Public License along with
Tix. If not, see <https://www.gnu.org/licenses/>.
tix-install.cpp
tix-install.c
Install a tix into a tix collection.
*******************************************************************************/
#define __STDC_CONSTANT_MACROS
#define __STDC_LIMIT_MACROS
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
@ -38,6 +35,7 @@
#include <limits.h>
#include <signal.h>
#include <stdarg.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
@ -177,7 +175,8 @@ int main(int argc, char* argv[])
break;
if ( arg[1] != '-' )
{
while ( char c = *++arg ) switch ( c )
char c;
while ( (c = *++arg) ) switch ( c )
{
default:
fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, c);

View File

@ -17,14 +17,11 @@
You should have received a copy of the GNU General Public License along with
Tix. If not, see <https://www.gnu.org/licenses/>.
tix-rmpatch.cpp
tix-rmpatch.c
Removes files from the current source directory.
*******************************************************************************/
#define __STDC_CONSTANT_MACROS
#define __STDC_LIMIT_MACROS
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
@ -38,6 +35,7 @@
#include <libgen.h>
#include <signal.h>
#include <stdarg.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
@ -140,7 +138,8 @@ bool rmpatch(FILE* input, const char* input_path, bool check)
error(1, errno, "%s:%zu: unexpected path with ..", input_path, line);
if ( check )
continue;
if ( pid_t child_pid = fork_or_death() )
pid_t child_pid;
if ( (child_pid = fork_or_death()) )
{
int status;
waitpid(child_pid, &status, 0);
@ -196,7 +195,8 @@ int main(int argc, char* argv[])
break;
if ( arg[1] != '-' )
{
while ( char c = *++arg ) switch ( c )
char c;
while ( (c = *++arg) ) switch ( c )
{
case 'c': check = true; break;
default:

View File

@ -17,14 +17,11 @@
You should have received a copy of the GNU General Public License along with
Tix. If not, see <https://www.gnu.org/licenses/>.
tix.cpp
tix.c
Front end to the Tix package management system.
*******************************************************************************/
#define __STDC_CONSTANT_MACROS
#define __STDC_LIMIT_MACROS
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
@ -38,6 +35,7 @@
#include <limits.h>
#include <signal.h>
#include <stdarg.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
@ -110,7 +108,7 @@ string_array_t GetPackageDependencies(params_t* params, const char* pkg_name)
VerifyTixInformation(&tixinfo, pkg_path);
const char* deps = dictionary_get(&tixinfo, "pkg.runtime-deps", "");
const char* deps = dictionary_get_def(&tixinfo, "pkg.runtime-deps", "");
string_array_append_token_string(&ret, deps);
string_array_reset(&tixinfo);
@ -193,7 +191,8 @@ int main(int argc, char* argv[])
break;
if ( arg[1] != '-' )
{
while ( char c = *++arg ) switch ( c )
char c;
while ( (c = *++arg) ) switch ( c )
{
default:
fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, c);

View File

@ -84,7 +84,7 @@ typedef struct
size_t capacity;
} string_array_t;
string_array_t string_array_make()
string_array_t string_array_make(void)
{
string_array_t sa;
sa.strings = NULL;
@ -306,14 +306,19 @@ const char* dictionary_get_entry(string_array_t* sa, const char* key)
return sa->strings[index];
}
const char* dictionary_get(string_array_t* sa, const char* key,
const char* def = NULL)
const char* dictionary_get_def(string_array_t* sa, const char* key,
const char* def)
{
size_t keylen = strlen(key);
const char* entry = dictionary_get_entry(sa, key);
return entry ? entry + keylen + 1 : def;
}
const char* dictionary_get(string_array_t* sa, const char* key)
{
return dictionary_get_def(sa, key, NULL);
}
void dictionary_normalize_entry(char* entry)
{
bool key = true;
@ -383,7 +388,7 @@ char* read_single_line(FILE* fp)
return ret;
}
pid_t fork_or_death()
pid_t fork_or_death(void)
{
pid_t child_pid = fork();
if ( child_pid < 0 )
@ -391,7 +396,7 @@ pid_t fork_or_death()
return child_pid;
}
void waitpid_or_death(pid_t child_pid, bool die_on_error = true)
void waitpid_or_death_def(pid_t child_pid, bool die_on_error)
{
int status;
waitpid(child_pid, &status, 0);
@ -406,15 +411,25 @@ void waitpid_or_death(pid_t child_pid, bool die_on_error = true)
}
}
bool fork_and_wait_or_death(bool die_on_error = true)
void waitpid_or_death(pid_t child_pid)
{
return waitpid_or_death_def(child_pid, true);
}
bool fork_and_wait_or_death_def(bool die_on_error)
{
pid_t child_pid = fork_or_death();
if ( !child_pid )
return true;
waitpid_or_death(child_pid, die_on_error);
waitpid_or_death_def(child_pid, die_on_error);
return false;
}
bool fork_and_wait_or_death(void)
{
return fork_and_wait_or_death_def(true);
}
const char* getenv_def(const char* var, const char* def)
{
const char* ret = getenv(var);
@ -443,7 +458,7 @@ static void compact_arguments(int* argc, char*** argv)
}
}
char* GetBuildTriplet()
char* GetBuildTriplet(void)
{
#if defined(__sortix__) && defined(__i386__)
return strdup("i486-sortix");
@ -767,13 +782,14 @@ void VerifyTixCollectionConfiguration(string_array_t* info, const char* path)
static pid_t original_pid;
__attribute__((constructor))
static void initialize_original_pid()
static void initialize_original_pid(void)
{
original_pid = getpid();
}
void cleanup_file_or_directory(int, void* path_ptr)
void cleanup_file_or_directory(int status, void* path_ptr)
{
(void) status;
if ( original_pid != getpid() )
return;
pid_t pid = fork();
@ -800,7 +816,7 @@ void cleanup_file_or_directory(int, void* path_ptr)
waitpid(pid, &code, 0);
}
mode_t get_umask_value()
mode_t get_umask_value(void)
{
mode_t result = umask(0);
umask(result);
@ -859,8 +875,7 @@ enum recovery_state
};
enum recovery_state
recovery_configure_state(bool set,
enum recovery_state to_what = RECOVERY_STATE_NONE)
recovery_configure_state_def(bool set, enum recovery_state to_what)
{
static enum recovery_state recovery_state = RECOVERY_STATE_NONE;
if ( set )
@ -868,7 +883,13 @@ recovery_configure_state(bool set,
return recovery_state;
}
bool recovery_print_attempted_execution()
enum recovery_state
recovery_configure_state(bool set)
{
return recovery_configure_state_def(set, RECOVERY_STATE_NONE);
}
bool recovery_print_attempted_execution(void)
{
pid_t child_pid = fork();
if ( child_pid < 0 )
@ -887,7 +908,7 @@ bool recovery_print_attempted_execution()
close(dev_null);
}
recovery_configure_state(true, RECOVERY_STATE_PRINT_COMMAND);
recovery_configure_state_def(true, RECOVERY_STATE_PRINT_COMMAND);
return true;
}
@ -897,7 +918,7 @@ bool recovery_print_attempted_execution()
return false;
}
bool recovery_run_shell()
bool recovery_run_shell(void)
{
pid_t child_pid = fork();
if ( child_pid < 0 )
@ -905,7 +926,7 @@ bool recovery_run_shell()
if ( !child_pid )
{
recovery_configure_state(true, RECOVERY_STATE_RUN_SHELL);
recovery_configure_state_def(true, RECOVERY_STATE_RUN_SHELL);
return true;
}
@ -963,7 +984,7 @@ int recovery_execvp(const char* path, char* const* argv)
__builtin_unreachable();
}
bool fork_and_wait_or_recovery()
bool fork_and_wait_or_recovery(void)
{
int default_selection = 1;