diff --git a/src/xpdev/dirwrap.c b/src/xpdev/dirwrap.c
index 61c481641a5ca596e767a3902babf5c6ce164fd5..12d0bfe17b030a94c2ca687622cde866dbe5d701 100644
--- a/src/xpdev/dirwrap.c
+++ b/src/xpdev/dirwrap.c
@@ -380,7 +380,7 @@ DIR* opendir(const char* dirname)
 		errno = ENOMEM;
 		return NULL;
 	}
-	sprintf(dir->filespec, "%.*s", sizeof(dir->filespec) - 5, dirname);
+	strlcpy(dir->filespec, dirname, sizeof(dir->filespec) - 5);
 	if (*dir->filespec && dir->filespec[strlen(dir->filespec) - 1] != '\\')
 		strcat(dir->filespec, "\\");
 	strcat(dir->filespec, "*.*");
@@ -400,7 +400,7 @@ struct dirent* readdir(DIR* dir)
 		return NULL;
 	if (dir->handle == -1)
 		return NULL;
-	sprintf(dir->dirent.d_name, "%.*s", sizeof(struct dirent) - 1, dir->finddata.name);
+	strlcpy(dir->dirent.d_name, dir->finddata.name, sizeof(dir->dirent.d_name) - 1);
 	if (_findnext(dir->handle, &dir->finddata) != 0)
 		dir->end = true;
 	return &dir->dirent;