View | Details | Raw Unified | Return to ticket 8246
Collapse All | Expand All

(-)a/src/slurmctld/job_mgr.c (-6 / +20 lines)
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
- 

Return to ticket 8246