diff --git a/src/dehacked.c b/src/dehacked.c
index e9d029be0b38ba2879291d0f9721f0d748c80850..fbd42dee10088b43e420f936c7910f53510f6398 100644
--- a/src/dehacked.c
+++ b/src/dehacked.c
@@ -419,7 +419,7 @@ static void readPlayer(MYFILE *f, INT32 num)
 			if (fastcmp(word, "PICNAME"))
 			{
 				SLOTFOUND
-				strncpy(description[num].picname, word2, 8);
+				strlcpy(description[num].picname, word2, sizeof(description->picname));
 			}
 			// new character select
 			else if (fastcmp(word, "DISPLAYNAME"))
@@ -3889,9 +3889,7 @@ static void readmaincfg(MYFILE *f)
 					lumpnum_t lumpnum;
 					char newname[9];
 
-					strncpy(newname, word2, 8);
-
-					newname[8] = '\0';
+					strlcpy(newname, word2, sizeof(newname));
 
 					lumpnum = W_CheckNumForName(newname);
 
diff --git a/src/f_finale.c b/src/f_finale.c
index 825f646b04755cbdce6222c2527dc7aed96143df..abef1da6933f5e6691abeaf6a95f4fcd3c216e4d 100644
--- a/src/f_finale.c
+++ b/src/f_finale.c
@@ -2338,7 +2338,7 @@ void F_InitMenuPresValues(void)
 	activeMenuId = MainDef.menuid;
 
 	// Set defaults for presentation values
-	strncpy(curbgname, "TITLESKY", 9);
+	strlcpy(curbgname, "TITLESKY", sizeof(curbgname));
 	curfadevalue = 16;
 	curbgcolor = -1;
 	curbgxspeed = (gamestate == GS_TIMEATTACK) ? 0 : titlescrollxspeed;
@@ -2348,7 +2348,7 @@ void F_InitMenuPresValues(void)
 	curhidepics = hidetitlepics;
 	curttmode = ttmode;
 	curttscale = ttscale;
-	strncpy(curttname, ttname, 9);
+	strlcpy(curttname, ttname, sizeof(curttname));
 	curttx = ttx;
 	curtty = tty;
 	curttloop = ttloop;
diff --git a/src/m_menu.c b/src/m_menu.c
index 1069f0f30211747d7a8dc4b4ecfda2847e851815..e510f582a39f603e88c52415162cbb4783e58201 100644
--- a/src/m_menu.c
+++ b/src/m_menu.c
@@ -2615,7 +2615,7 @@ static boolean MIT_SetCurBackground(UINT32 menutype, INT32 level, INT32 *retval,
 	}
 	else if (menupres[menutype].bgname[0])
 	{
-		strncpy(curbgname, menupres[menutype].bgname, 8);
+		strlcpy(curbgname, menupres[menutype].bgname, sizeof(curbgname));
 		curbgxspeed = menupres[menutype].titlescrollxspeed != INT32_MAX ? menupres[menutype].titlescrollxspeed : titlescrollxspeed;
 		curbgyspeed = menupres[menutype].titlescrollyspeed != INT32_MAX ? menupres[menutype].titlescrollyspeed : titlescrollyspeed;
 		return true;
@@ -2628,7 +2628,7 @@ static boolean MIT_SetCurBackground(UINT32 menutype, INT32 level, INT32 *retval,
 			curbghide = true;
 		else
 		{
-			strncpy(curbgname, defaultname, 9);
+			strlcpy(curbgname, defaultname, sizeof(curbgname));
 			curbgxspeed = (gamestate == GS_TIMEATTACK) ? 0 : titlescrollxspeed;
 			curbgyspeed = (gamestate == GS_TIMEATTACK) ? 0 : titlescrollyspeed;
 		}
@@ -2767,7 +2767,7 @@ void M_ChangeMenuMusic(const char *defaultmusname, boolean defaultmuslooping)
 void M_SetMenuCurBackground(const char *defaultname)
 {
 	char name[9];
-	strncpy(name, defaultname, 8);
+	strlcpy(name, defaultname, 9);
 	M_IterateMenuTree(MIT_SetCurBackground, &name);
 }
 
@@ -2820,7 +2820,7 @@ static void M_HandleMenuPresState(menu_t *newMenu)
 	activeMenuId = newMenu ? newMenu->menuid : 0;
 
 	// Set defaults for presentation values
-	strncpy(curbgname, "TITLESKY", 9);
+	strlcpy(curbgname, "TITLESKY", sizeof(curbgname));
 	curfadevalue = 16;
 	curhidepics = hidetitlepics;
 	curbgcolor = -1;
@@ -5785,7 +5785,7 @@ static void M_DrawLevelPlatterMenu(void)
 		{
 			F_SkyScroll(curbgxspeed, curbgyspeed, curbgname);
 			// Draw and animate foreground
-			if (!strncmp("RECATKBG", curbgname, 8))
+			if (!strcmp("RECATKBG", curbgname))
 				M_DrawRecordAttackForeground();
 		}
 
@@ -6033,7 +6033,7 @@ static void M_DrawMessageMenu(void)
 			else
 			{
 				F_SkyScroll(curbgxspeed, curbgyspeed, curbgname);
-				if (!strncmp("RECATKBG", curbgname, 8))
+				if (!strcmp("RECATKBG", curbgname))
 					M_DrawRecordAttackForeground();
 			}
 		}
@@ -9583,7 +9583,7 @@ void M_DrawTimeAttackMenu(void)
 	{
 		F_SkyScroll(curbgxspeed, curbgyspeed, curbgname);
 		// Draw and animate foreground
-		if (!strncmp("RECATKBG", curbgname, 8))
+		if (!strcmp("RECATKBG", curbgname))
 			M_DrawRecordAttackForeground();
 	}
 	if (curfadevalue)
diff --git a/src/m_menu.h b/src/m_menu.h
index eeda9cc580867ca1ae3fa2dee31cbdd643c5de4d..0658f38daadf4d2ba3c2362725543ab79bf39536 100644
--- a/src/m_menu.h
+++ b/src/m_menu.h
@@ -340,7 +340,7 @@ typedef struct
 {
 	boolean used;
 	char notes[441];
-	char picname[8];
+	char picname[9];
 	char skinname[SKINNAMESIZE*2+2]; // skin&skin\0
 	patch_t *charpic;
 	UINT8 prev;
diff --git a/src/p_setup.c b/src/p_setup.c
index 8c73b85e6f7f36392d9ad3829e7a3bf1366f8407..61a49d958439ca627034f2d7ea6cbc6159c30d34 100644
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -2883,9 +2883,7 @@ static void P_RunLevelScript(const char *scriptname)
 		lumpnum_t lumpnum;
 		char newname[9];
 
-		strncpy(newname, scriptname, 8);
-
-		newname[8] = '\0';
+		strlcpy(newname, scriptname, sizeof(newname));
 
 		lumpnum = W_CheckNumForName(newname);
 
diff --git a/src/r_data.c b/src/r_data.c
index 831e75bef64276bae116ee376b31e2e3eda52a3c..c542bbd987030009e7e48e805d93a9247bd8e0a7 100644
--- a/src/r_data.c
+++ b/src/r_data.c
@@ -2603,7 +2603,7 @@ INT32 R_CheckTextureNumForName(const char *name)
 		return 0;
 
 	for (i = 0; i < tidcachelen; i++)
-		if (!strncasecmp(tidcache[i].name, name, 8))
+		if (!strcasecmp(tidcache[i].name, name))
 			return tidcache[i].id;
 
 	// Need to parse the list backwards, so textures loaded more recently are used in lieu of ones loaded earlier
@@ -2613,8 +2613,7 @@ INT32 R_CheckTextureNumForName(const char *name)
 		{
 			tidcachelen++;
 			Z_Realloc(tidcache, tidcachelen * sizeof(*tidcache), PU_STATIC, &tidcache);
-			strncpy(tidcache[tidcachelen-1].name, name, 8);
-			tidcache[tidcachelen-1].name[8] = '\0';
+			strlcpy(tidcache[tidcachelen-1].name, name, sizeof(tidcache->name));
 #ifndef ZDEBUG
 			CONS_Debug(DBG_SETUP, "texture #%s: %s\n", sizeu1(tidcachelen), tidcache[tidcachelen-1].name);
 #endif
diff --git a/src/v_video.c b/src/v_video.c
index 2d1014c23f3e44820a7106a11a05df2acc7be525..e03d0a60de2418a6d2aaf9a41ba1d4effddf4a10 100644
--- a/src/v_video.c
+++ b/src/v_video.c
@@ -391,7 +391,7 @@ const char *R_GetPalname(UINT16 num)
 	if (num > 0 && num <= 10000)
 		snprintf(newpal, 8, "PAL%04u", num-1);
 
-	strncpy(palname, newpal, 8);
+	strlcpy(palname, newpal, sizeof(palname));
 	return palname;
 }
 
diff --git a/src/w_wad.c b/src/w_wad.c
index a8113235465ccb32fc1771fb27f54142aa277677..267f0619863e421740c03a8d91d1c04fe03e9193 100644
--- a/src/w_wad.c
+++ b/src/w_wad.c
@@ -440,17 +440,15 @@ static lumpinfo_t* ResGetLumpsWad (FILE* handle, UINT16* nlmp, const char* filen
 		else
 			lump_p->compression = CM_NOCOMPRESSION;
 		memset(lump_p->name, 0x00, 9);
-		strncpy(lump_p->name, fileinfo->name, 8);
+		strlcpy(lump_p->name, fileinfo->name, 9);
 
 		// Allocate the lump's long name.
 		lump_p->longname = Z_Malloc(9 * sizeof(char), PU_STATIC, NULL);
-		strncpy(lump_p->longname, fileinfo->name, 8);
-		lump_p->longname[8] = '\0';
+		strlcpy(lump_p->longname, fileinfo->name, 9);
 
 		// Allocate the lump's full name.
 		lump_p->fullname = Z_Malloc(9 * sizeof(char), PU_STATIC, NULL);
-		strncpy(lump_p->fullname, fileinfo->name, 8);
-		lump_p->fullname[8] = '\0';
+		strlcpy(lump_p->fullname, fileinfo->name, 9);
 	}
 	free(fileinfov);
 	*nlmp = numlumps;
diff --git a/src/y_inter.c b/src/y_inter.c
index f1764a816d5f2049b5fe516ba6ae8f010f679d4e..ce57bef9ec8af304e31829777c18de593c9cb6e4 100644
--- a/src/y_inter.c
+++ b/src/y_inter.c
@@ -1740,9 +1740,8 @@ static void Y_CalculateCompetitionWinners(void)
 		data.competition.monitors[data.competition.numplayers] = monitors[winner];
 		data.competition.scores[data.competition.numplayers] = scores[winner];
 
-		strncpy(tempname, player_names[winner], 8);
-		tempname[8] = '\0';
-		strncpy(data.competition.name[data.competition.numplayers], tempname, 9);
+		strlcpy(tempname, player_names[winner], 9);
+		strlcpy(data.competition.name[data.competition.numplayers], tempname, 9);
 
 		data.competition.color[data.competition.numplayers] = &players[winner].skincolor;
 		data.competition.character[data.competition.numplayers] = &players[winner].skin;