|
Lines 10300-10313
static void _pack_default_job_details(job_record_t *job_ptr, Buf buffer,
Link Here
|
| 10300 |
packstr(detail_ptr->dependency, buffer); |
10300 |
packstr(detail_ptr->dependency, buffer); |
| 10301 |
|
10301 |
|
| 10302 |
if (detail_ptr->argv) { |
10302 |
if (detail_ptr->argv) { |
| 10303 |
char *cmd_line = NULL; |
10303 |
/* Open code with raw pointers and |
|
|
10304 |
* malloc instead of xstring API in |
| 10305 |
* order to avoid repeatedly |
| 10306 |
* reallocating and using a Schlemiel |
| 10307 |
* the Painter's algorithm to build |
| 10308 |
* the string. */ |
| 10309 |
size_t arglen = 0; |
| 10304 |
for (i = 0; detail_ptr->argv[i]; i++) { |
10310 |
for (i = 0; detail_ptr->argv[i]; i++) { |
| 10305 |
if (i != 0) |
10311 |
arglen += strlen(detail_ptr->argv[i]) + 1; |
| 10306 |
xstrcatchar(cmd_line, ' '); |
|
|
| 10307 |
xstrcat(cmd_line, detail_ptr->argv[i]); |
| 10308 |
} |
10312 |
} |
|
|
10313 |
char *cmd_line = malloc(arglen); |
| 10314 |
char *d = cmd_line; |
| 10315 |
for (i = 0; detail_ptr->argv[i]; i++) { |
| 10316 |
size_t len = strlen(detail_ptr->argv[i]); |
| 10317 |
memcpy(d, detail_ptr->argv[i], len); |
| 10318 |
d += len; |
| 10319 |
*d = ' '; |
| 10320 |
d++; |
| 10321 |
} |
| 10322 |
d--; |
| 10323 |
*d = '\0'; |
| 10309 |
packstr(cmd_line, buffer); |
10324 |
packstr(cmd_line, buffer); |
| 10310 |
xfree(cmd_line); |
10325 |
free(cmd_line); |
| 10311 |
} else |
10326 |
} else |
| 10312 |
packnull(buffer); |
10327 |
packnull(buffer); |
| 10313 |
|
10328 |
|
| 10314 |
- |
|
|