diff --git a/src/srun/libsrun/fname.c b/src/srun/libsrun/fname.c
index 419ccc09559a42fdd3709c74dad968f7d4635365..eda68894250b6c00f5f8f2ce13c35ec6231de929 100644
--- a/src/srun/libsrun/fname.c
+++ b/src/srun/libsrun/fname.c
@@ -72,8 +72,9 @@ fname_create(srun_job_t *job, char *format)
 	fname_t *fname = NULL;
 	char *p, *q, *name, *tmp_env;
 	uint32_t array_job_id  = job->jobid;
-	uint16_t array_task_id = (uint16_t) NO_VAL;
+	uint32_t array_task_id = NO_VAL;
 	char *esc;
+	char *end;
 
 	fname = xmalloc(sizeof(*fname));
 	fname->type = IO_ALL;
@@ -141,17 +142,17 @@ fname_create(srun_job_t *job, char *format)
 			 case 'a':  /* '%a' => array task id   */
 				tmp_env = getenv("SLURM_ARRAY_TASK_ID");
 				if (tmp_env)
-					array_task_id = atoi(tmp_env);
+					array_task_id = strtoul(tmp_env, &end, 10);
 				xmemcat(name, q, p - 1);
-				xstrfmtcat(name, "%0*d", wid, array_task_id);
+				xstrfmtcat(name, "%0*u", wid, array_task_id);
 				q = ++p;
 				break;
 			 case 'A':  /* '%A' => array master job id */
 				tmp_env = getenv("SLURM_ARRAY_JOB_ID");
 				if (tmp_env)
-					array_job_id = atoi(tmp_env);
+					array_job_id = strtoul(tmp_env, &end, 10);
 				xmemcat(name, q, p - 1);
-				xstrfmtcat(name, "%0*d", wid, array_job_id);
+				xstrfmtcat(name, "%0*u", wid, array_job_id);
 				q = ++p;
 				break;