fffc91
utility: added slbt_main() as a public interface, refactored accordingly.
@@ -259,6 +259,7 @@ slbt_api int slbt_copy_file (const struct slbt_driver_ctx *, struct slbt_exec_
|
|
259
259
|
slbt_api int slbt_dump_machine (const char * compiler, char * machine, size_t bufsize);
|
260
260
|
|
261
261
|
/* utility api */
|
262
|
+
slbt_api int slbt_main (int, char **, char **);
|
262
263
|
slbt_api int slbt_output_config (const struct slbt_driver_ctx *);
|
263
264
|
slbt_api int slbt_output_exec (const struct slbt_driver_ctx *, const struct slbt_exec_ctx *, const char *);
|
264
265
|
slbt_api int slbt_output_compile (const struct slbt_driver_ctx *, const struct slbt_exec_ctx *);
|
@@ -8,7 +8,6 @@
|
|
8
8
|
|
9
9
|
|
10
10
|
|
11
|
-
extern int slibtool_main(int, char **, char **);
|
12
11
|
extern const struct argv_option slbt_default_options[];
|
13
12
|
|
14
13
|
enum app_tags {
|
@@ -31,7 +31,7 @@ static const char * const slbt_ver_plain[6] = {
|
|
31
31
|
"",""
|
32
32
|
};
|
33
33
|
|
34
|
-
static ssize_t
|
34
|
+
static ssize_t slbt_version(struct slbt_driver_ctx * dctx)
|
35
35
|
{
|
36
36
|
const struct slbt_source_version * verinfo;
|
37
37
|
const char * const * verclr;
|
@@ -50,7 +50,7 @@ static ssize_t slibtool_version(struct slbt_driver_ctx * dctx)
|
|
50
50
|
verclr[5],gitver ? "]" : "");
|
51
51
|
}
|
52
52
|
|
53
|
-
static void
|
53
|
+
static void slbt_perform_driver_actions(struct slbt_driver_ctx * dctx)
|
54
54
|
{
|
55
55
|
if (dctx->cctx->drvflags & SLBT_DRIVER_CONFIG)
|
56
56
|
dctx->nerrors += (slbt_output_config(dctx) < 0);
|
@@ -68,12 +68,12 @@ static void slibtool_perform_driver_actions(struct slbt_driver_ctx * dctx)
|
|
68
68
|
dctx->nerrors += (slbt_exec_link(dctx,0) < 0);
|
69
69
|
}
|
70
70
|
|
71
|
-
static void
|
71
|
+
static void slbt_perform_unit_actions(struct slbt_unit_ctx * uctx)
|
72
72
|
{
|
73
73
|
(void)uctx;
|
74
74
|
}
|
75
75
|
|
76
|
-
static int
|
76
|
+
static int slbt_exit(struct slbt_driver_ctx * dctx, int nerrors)
|
77
77
|
{
|
78
78
|
if (nerrors && errno)
|
79
79
|
strerror(errno);
|
@@ -82,7 +82,7 @@ static int slibtool_exit(struct slbt_driver_ctx * dctx, int nerrors)
|
|
82
82
|
return nerrors ? 2 : 0;
|
83
83
|
}
|
84
84
|
|
85
|
-
int
|
85
|
+
int slbt_main(int argc, char ** argv, char ** envp)
|
86
86
|
{
|
87
87
|
int ret;
|
88
88
|
uint64_t flags;
|
@@ -105,9 +105,9 @@ int slibtool_main(int argc, char ** argv, char ** envp)
|
|
105
105
|
sargv[4] = 0;
|
106
106
|
|
107
107
|
return (slbt_get_driver_ctx(sargv,envp,SLBT_DRIVER_FLAGS,&dctx))
|
108
|
-
? 2 : (
|
109
|
-
?
|
110
|
-
:
|
108
|
+
? 2 : (slbt_version(dctx) < 0)
|
109
|
+
? slbt_exit(dctx,2)
|
110
|
+
: slbt_exit(dctx,0);
|
111
111
|
}
|
112
112
|
|
113
113
|
/* program */
|
@@ -154,28 +154,28 @@ int slibtool_main(int argc, char ** argv, char ** envp)
|
|
154
154
|
return (ret == SLBT_USAGE) ? !--argc : 2;
|
155
155
|
|
156
156
|
if (dctx->cctx->drvflags & SLBT_DRIVER_VERSION)
|
157
|
-
if ((
|
158
|
-
return
|
157
|
+
if ((slbt_version(dctx)) < 0)
|
158
|
+
return slbt_exit(dctx,2);
|
159
159
|
|
160
|
-
|
160
|
+
slbt_perform_driver_actions(dctx);
|
161
161
|
ret += dctx->nerrors;
|
162
162
|
|
163
163
|
for (unit=dctx->units; *unit; unit++) {
|
164
164
|
if (!(slbt_get_unit_ctx(dctx,*unit,&uctx))) {
|
165
|
-
|
165
|
+
slbt_perform_unit_actions(uctx);
|
166
166
|
ret += uctx->nerrors;
|
167
167
|
slbt_free_unit_ctx(uctx);
|
168
168
|
}
|
169
169
|
}
|
170
170
|
|
171
|
-
return
|
171
|
+
return slbt_exit(dctx,ret);
|
172
172
|
}
|
173
173
|
|
174
174
|
|
175
175
|
|
176
176
|
int main(int argc, char ** argv, char ** envp)
|
177
177
|
{
|
178
|
-
return
|
178
|
+
return slbt_main(argc,argv,envp);
|
179
179
|
}
|
180
180
|
|
181
181
|
|