@@ -37,16 +37,15 @@ static const char *
37
37
getCommandLineOptionValue (const char * optionName , int argc , char * * argv , int * error )
38
38
{
39
39
const char * value = NULL ;
40
- int i = 0 ;
40
+ int i = argc - 1 ;
41
41
size_t optionNameLength = strlen (optionName );
42
- jboolean optionNameFound = JNI_FALSE ;
43
- * error = 0 ;
44
- for (i = 0 ; i < argc ; i ++ ) {
42
+ * error = -1 ;
43
+ for (i = argc - 1 ; i >= 0 ; i -- ) {
45
44
const char * arg = argv [i ];
46
45
if (0 == strncmp (arg , optionName , optionNameLength )) {
47
46
const char * equals = arg + optionNameLength ;
48
47
if (('=' == * equals ) || ('\0' == * equals )) {
49
- optionNameFound = JNI_TRUE ;
48
+ * error = 0 ;
50
49
value = equals ;
51
50
if ('=' == * value ) {
52
51
value += 1 ;
@@ -58,9 +57,6 @@ getCommandLineOptionValue(const char *optionName, int argc, char **argv, int *er
58
57
}
59
58
}
60
59
}
61
- if (!optionNameFound ) {
62
- * error = -1 ;
63
- }
64
60
return value ;
65
61
}
66
62
@@ -185,7 +181,7 @@ restoreFromCheckpoint(const char *checkpointDirectory, int logLevel, jboolean un
185
181
{
186
182
int restoreStatus = 0 ;
187
183
int length = -1 ;
188
- char * logLevelOption = NULL ;
184
+ char logLevelOption [ 4 ] = { 0 } ;
189
185
char * logFileOption = NULL ;
190
186
int argc = 0 ;
191
187
const char * argv [9 ] = { NULL };
@@ -195,49 +191,32 @@ restoreFromCheckpoint(const char *checkpointDirectory, int logLevel, jboolean un
195
191
argv [argc ++ ] = checkpointDirectory ;
196
192
length = snprintf (NULL , 0 , "-v%d" , logLevel );
197
193
if (length < 0 ) {
198
- char logLevelString [2 ] = { 0 };
199
- sprintf (logLevelString , "%d" , logLevel );
200
- JLI_ReportErrorMessage ("Failed to calculate the length of the command option, value=%s, format=%s." , logLevelString , "-v%d" );
194
+ JLI_ReportErrorMessage ("Failed to calculate the length of option '-v%d'." , logLevel );
201
195
restoreStatus = -1 ;
202
196
goto done ;
203
197
}
204
- logLevelOption = (char * )JLI_MemAlloc (length + 1 );
205
- if (NULL == logLevelOption ) {
206
- char logLevelString [2 ] = { 0 };
207
- sprintf (logLevelString , "%d" , logLevel );
208
- JLI_ReportErrorMessage ("Failed to allocate memory for the command option, value=%s, format=%s." , logLevelString , "-v%d" );
198
+ if (snprintf (logLevelOption , sizeof (logLevelOption ), "-v%d" , logLevel ) < 0 ) {
199
+ JLI_ReportErrorMessage ("Failed to format the log level option '-v%d'." , logLevel );
209
200
restoreStatus = -1 ;
210
201
goto done ;
211
202
}
212
- if (snprintf (logLevelOption , length + 1 , "-v%d" , logLevel ) < 0 ) {
213
- char logLevelString [2 ] = { 0 };
214
- sprintf (logLevelString , "%d" , logLevel );
215
- JLI_ReportErrorMessage ("Failed to allocate memory for the command option, value=%s, format=%s." , logLevelString , "-v%d" );
216
- restoreStatus = -1 ;
217
- goto freeLogLevelOption ;
218
- }
219
203
argv [argc ++ ] = logLevelOption ;
220
204
argv [argc ++ ] = "--shell-job" ;
221
205
if (unprivilegedModeOn ) {
222
206
argv [argc ++ ] = "--unprivileged" ;
223
207
}
224
208
if (NULL != logFile ) {
225
- length = snprintf (NULL , 0 , "--log-file=%s" , logFile );
226
- if (length < 0 ) {
227
- JLI_ReportErrorMessage ("Failed to calculate the length of the command option, value=%s, format=%s." , logFile , "--log-file=%s" );
228
- restoreStatus = -1 ;
229
- goto freeLogLevelOption ;
230
- }
231
- logFileOption = (char * )JLI_MemAlloc (length + 1 );
209
+ length = strlen (logFile ) + sizeof ("--log-file=%s" ) - 1 ;
210
+ logFileOption = (char * )JLI_MemAlloc (length - 1 );
232
211
if (NULL == logFileOption ) {
233
- JLI_ReportErrorMessage ("Failed to allocate memory for the command option, value=%s, format=%s." , logFile , " --log-file=%s" );
212
+ JLI_ReportErrorMessage ("Failed to allocate memory for option ' --log-file=%s'." , logFile );
234
213
restoreStatus = -1 ;
235
- goto freeLogLevelOption ;
214
+ goto done ;
236
215
}
237
- if (snprintf (logFileOption , length + 1 , "--log-file=%s" , logFile ) < 0 ) {
238
- JLI_ReportErrorMessage ("Failed to allocate memory for the command option, value=%s, format=%s." , logFile , " --log-file=%s" );
216
+ if (snprintf (logFileOption , length - 1 , "--log-file=%s" , logFile ) < 0 ) {
217
+ JLI_ReportErrorMessage ("Failed to format option ' --log-file=%s'." , logFile );
239
218
restoreStatus = -1 ;
240
- goto freeLogFileOption ;
219
+ goto done ;
241
220
}
242
221
argv [argc ++ ] = logFileOption ;
243
222
}
@@ -246,15 +225,10 @@ restoreFromCheckpoint(const char *checkpointDirectory, int logLevel, jboolean un
246
225
/* If execvp returns, there was an error. */
247
226
restoreStatus = -1 ;
248
227
freeLogFileOption :
249
- if (logFileOption != NULL ) {
228
+ if (NULL != logFileOption ) {
250
229
JLI_MemFree ((void * )logFileOption );
251
230
logFileOption = NULL ;
252
231
}
253
- freeLogLevelOption :
254
- if (logLevelOption != NULL ) {
255
- JLI_MemFree ((void * )logLevelOption );
256
- logLevelOption = NULL ;
257
- }
258
232
done :
259
233
return restoreStatus ;
260
234
}
0 commit comments