diff --git a/src/backend/access/common/tupdesc.c b/src/backend/access/common/tupdesc.c
index c690918f61a713c1e727660e9d5adadabd0515a1..be75674ead8bd1f94837fa29fdec637bc5afedf4 100644
--- a/src/backend/access/common/tupdesc.c
+++ b/src/backend/access/common/tupdesc.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/access/common/tupdesc.c,v 1.26 1997/09/18 20:19:38 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/access/common/tupdesc.c,v 1.27 1997/10/25 01:08:45 momjian Exp $
  *
  * NOTES
  *	  some of the executor utility code such as "ExecTypeFromTL" should be
@@ -489,7 +489,7 @@ BuildDescForRelation(List *schema, char *relname)
 		}
 		else
 		{
-			strNcpy(typename, entry->typename->name, NAMEDATALEN - 1);
+			StrNCpy(typename, entry->typename->name, NAMEDATALEN);
 			attdim = 0;
 		}
 
diff --git a/src/backend/commands/async.c b/src/backend/commands/async.c
index aa86d9982dcf1d4d18fec74ef21d7ab6604ddea4..81a90be085d19492a62a3c3e4e55f4516e623739 100644
--- a/src/backend/commands/async.c
+++ b/src/backend/commands/async.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/commands/async.c,v 1.20 1997/09/12 04:07:20 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/commands/async.c,v 1.21 1997/10/25 01:08:49 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -488,7 +488,7 @@ Async_Listen(char *relname, int pid)
 	 * unlisten prior to dying.
 	 */
 	relnamei = malloc(NAMEDATALEN);		/* persists to process exit */
-	strNcpy(relnamei, relname, NAMEDATALEN - 1);
+	StrNCpy(relnamei, relname, NAMEDATALEN);
 	on_exitpg(Async_UnlistenOnExit, (caddr_t) relnamei);
 }
 
diff --git a/src/backend/commands/creatinh.c b/src/backend/commands/creatinh.c
index 36d81bdc4e255fe5fb79ca0a6c3ef49d32adf7e0..ef92b30071b029f6f1817c19f99e2d7128ea9f5e 100644
--- a/src/backend/commands/creatinh.c
+++ b/src/backend/commands/creatinh.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/commands/Attic/creatinh.c,v 1.17 1997/09/08 21:42:33 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/commands/Attic/creatinh.c,v 1.18 1997/10/25 01:08:51 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -65,7 +65,7 @@ DefineRelation(CreateStmt *stmt)
 	if (strlen(stmt->relname) >= NAMEDATALEN)
 		elog(WARN, "the relation name %s is >= %d characters long", stmt->relname,
 			 NAMEDATALEN);
-	strNcpy(relname, stmt->relname, NAMEDATALEN - 1);	/* make full length for
+	StrNCpy(relname, stmt->relname, NAMEDATALEN);	/* make full length for
 														 * copy */
 
 	/* ----------------
diff --git a/src/backend/commands/recipe.c b/src/backend/commands/recipe.c
index 945dc7d7c2bcac21ef461f475b925e0ff0db68db..077e88237800c1de5671850905664f9fc1d371b0 100644
--- a/src/backend/commands/recipe.c
+++ b/src/backend/commands/recipe.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/commands/Attic/recipe.c,v 1.9 1997/09/08 21:42:42 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/commands/Attic/recipe.c,v 1.10 1997/10/25 01:08:54 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1344,7 +1344,7 @@ replaceTeeScans(Plan *plan, Query *parsetree, TeeInfo * teeInfo)
 		if ((strlen(rte->refname) < 4) ||
 			(strcmp(rte->relname, rte->refname) != 0))
 			continue;
-		strNcpy(prefix, rte->refname, 4);
+		StrNCpy(prefix, rte->refname, 5);
 		if (strcmp(prefix, "tee_") == 0)
 		{
 			/* okay, we found a tee node entry in the range table */
diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c
index 07935eced7297403b042838a4a7f86afd063b94b..3293e13bd698784e7f115d6f1c017697a99361c2 100644
--- a/src/backend/executor/execMain.c
+++ b/src/backend/executor/execMain.c
@@ -26,7 +26,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.27 1997/10/12 07:09:02 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.28 1997/10/25 01:09:01 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -330,9 +330,9 @@ ExecCheckPerms(CmdType operation,
 		if (!HeapTupleIsValid(htp))
 			elog(WARN, "ExecCheckPerms: bogus RT relid: %d",
 				 relid);
-		strNcpy(rname.data,
+		StrNCpy(rname.data,
 				((Form_pg_class) GETSTRUCT(htp))->relname.data,
-				NAMEDATALEN - 1);
+				NAMEDATALEN);
 		if (i == resultRelation)
 		{						/* this is the result relation */
 			qvars = pull_varnos(parseTree->qual);
diff --git a/src/backend/executor/execUtils.c b/src/backend/executor/execUtils.c
index e25a76c71b06f1ae66f75f9f94c1df1647d576ee..2282775c9a58f693b25371baa967f4d49d7f1020 100644
--- a/src/backend/executor/execUtils.c
+++ b/src/backend/executor/execUtils.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/executor/execUtils.c,v 1.19 1997/09/18 20:20:35 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/executor/execUtils.c,v 1.20 1997/10/25 01:09:10 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -514,7 +514,7 @@ ExecSetTypeInfo(int index,
 	att->attrelid = 0;			/* dummy value */
 
 	if (attName != (char *) NULL)
-		strNcpy(att->attname.data, attName, NAMEDATALEN - 1);
+		StrNCpy(att->attname.data, attName, NAMEDATALEN);
 	else
 		MemSet(att->attname.data, 0, NAMEDATALEN);
 
diff --git a/src/backend/libpq/be-fsstubs.c b/src/backend/libpq/be-fsstubs.c
index 19a5275737042a2abfba507d3d3b05135fddf53a..24c3199c1a5725f4f0f976010a21418acc1a3aca 100644
--- a/src/backend/libpq/be-fsstubs.c
+++ b/src/backend/libpq/be-fsstubs.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/libpq/be-fsstubs.c,v 1.15 1997/09/08 21:43:41 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/libpq/be-fsstubs.c,v 1.16 1997/10/25 01:09:16 momjian Exp $
  *
  * NOTES
  *	  This should be moved to a more appropriate place.  It is here
@@ -269,7 +269,7 @@ lo_import(text *filename)
 	/*
 	 * open the file to be read in
 	 */
-	strNcpy(fnamebuf, VARDATA(filename), VARSIZE(filename) - VARHDRSZ);
+	StrNCpy(fnamebuf, VARDATA(filename), VARSIZE(filename) - VARHDRSZ + 1);
 	fd = open(fnamebuf, O_RDONLY, 0666);
 	if (fd < 0)
 	{							/* error */
@@ -343,7 +343,7 @@ lo_export(Oid lobjId, text *filename)
 	 * open the file to be written to
 	 */
 	oumask = umask((mode_t) 0);
-	strNcpy(fnamebuf, VARDATA(filename), VARSIZE(filename) - VARHDRSZ);
+	StrNCpy(fnamebuf, VARDATA(filename), VARSIZE(filename) - VARHDRSZ + 1);
 	fd = open(fnamebuf, O_CREAT | O_WRONLY, 0666);
 	umask(oumask);
 	if (fd < 0)
diff --git a/src/backend/libpq/be-pqexec.c b/src/backend/libpq/be-pqexec.c
index 31be26425f91eec6d09f06379af460da352983bf..292cf3730e49da7189a411a62115c93a0226251c 100644
--- a/src/backend/libpq/be-pqexec.c
+++ b/src/backend/libpq/be-pqexec.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/libpq/Attic/be-pqexec.c,v 1.7 1997/09/08 21:43:43 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/libpq/Attic/be-pqexec.c,v 1.8 1997/10/25 01:09:18 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -241,7 +241,7 @@ strmake(char *str, int len)
 		len = strlen(str);
 
 	newstr = (char *) palloc((unsigned) len + 1);
-	strNcpy(newstr, str, len);
+	StrNCpy(newstr, str, len+1);
 	newstr[len] = (char) 0;
 	return newstr;
 }
diff --git a/src/backend/libpq/password.c b/src/backend/libpq/password.c
index bd2f6bee2019c2763a57766f3ede026abb5805f2..aaa204b4db9ac79d0c6f3cfeeccad579dc78124c 100644
--- a/src/backend/libpq/password.c
+++ b/src/backend/libpq/password.c
@@ -90,7 +90,7 @@ verify_password(char *user, char *password, Port *port,
 		if (test_pw[strlen(test_pw) - 1] == '\n')
 			test_pw[strlen(test_pw) - 1] = '\0';
 
-		strNcpy(salt, test_pw, 2);
+		StrNCpy(salt, test_pw, 3);
 
 		if (strcmp(user, test_user) == 0)
 		{
diff --git a/src/backend/libpq/portal.c b/src/backend/libpq/portal.c
index c85b3a763c2f916a948306f34e44609408d535c3..7e8cab0afefba7af7b1b642a01ae2fd04ba8cd82 100644
--- a/src/backend/libpq/portal.c
+++ b/src/backend/libpq/portal.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/libpq/Attic/portal.c,v 1.9 1997/09/08 21:43:47 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/libpq/Attic/portal.c,v 1.10 1997/10/25 01:09:21 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -154,7 +154,7 @@ PQpnames(char **pnames, int rule_p)
 		{
 			if (!rule_p || portals[i]->portal->rule_p)
 			{
-				strncpy(pnames[cur_pname], portals[i]->name, PortalNameLength);
+				strncpy(pnames[cur_pname], portals[i]->name, PortalNameLength+1);
 				++cur_pname;
 			}
 		}
@@ -730,7 +730,7 @@ PQappendNotify(char *relname, int pid)
 		pqNotifyList = DLNewList();
 
 	p = (PQNotifyList *) pbuf_alloc(sizeof(PQNotifyList));
-	strNcpy(p->relname, relname, NAMEDATALEN - 1);
+	StrNCpy(p->relname, relname, NAMEDATALEN);
 	p->be_pid = pid;
 	p->valid = 1;
 	DLAddTail(pqNotifyList, DLNewElem(p));
diff --git a/src/backend/libpq/portalbuf.c b/src/backend/libpq/portalbuf.c
index bff6a449ead0074a1333c65f44b8a9074b156668..82956fe2329e9bcb7b2fbf53f3ce4e609671f614 100644
--- a/src/backend/libpq/portalbuf.c
+++ b/src/backend/libpq/portalbuf.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/libpq/Attic/portalbuf.c,v 1.7 1997/09/08 21:43:48 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/libpq/Attic/portalbuf.c,v 1.8 1997/10/25 01:09:23 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -384,7 +384,7 @@ void
 pbuf_setportalinfo(PortalEntry *entry, char *pname)
 {
 	if (entry)
-		strNcpy(entry->name, pname, PortalNameLength - 1);
+		StrNCpy(entry->name, pname, PortalNameLength);
 }
 
 /* --------------------------------
diff --git a/src/backend/nodes/print.c b/src/backend/nodes/print.c
index 634870ab8ac2fa3547ce4dfa376ab6b213128082..d674263a32480fe52d0264bf111fc2b14aa17ae2 100644
--- a/src/backend/nodes/print.c
+++ b/src/backend/nodes/print.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/nodes/print.c,v 1.9 1997/09/08 21:44:10 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/nodes/print.c,v 1.10 1997/10/25 01:09:28 momjian Exp $
  *
  * HISTORY
  *	  AUTHOR			DATE			MAJOR EVENT
@@ -391,14 +391,14 @@ print_plan_recursive(Plan *p, Query *parsetree, int indentLevel, char *label)
 		RangeTblEntry *rte;
 
 		rte = rt_fetch(((Scan *) p)->scanrelid, parsetree->rtable);
-		strNcpy(extraInfo, rte->relname, NAMEDATALEN - 1);
+		StrNCpy(extraInfo, rte->relname, NAMEDATALEN);
 	}
 	else if (IsA(p, IndexScan))
 	{
-		strNcpy(extraInfo,
+		StrNCpy(extraInfo,
 		   ((RangeTblEntry *) (nth(((IndexScan *) p)->scan.scanrelid - 1,
 								   parsetree->rtable)))->relname,
-				NAMEDATALEN - 1);
+				NAMEDATALEN);
 	}
 	else
 		extraInfo[0] = '\0';
diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c
index 6caa2cc9a709598d2ddc2e13480cb44d947476b3..ab05372a917a74bdae8e3c3b263afbe00a387084 100644
--- a/src/backend/nodes/readfuncs.c
+++ b/src/backend/nodes/readfuncs.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.9 1997/09/08 21:44:11 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.10 1997/10/25 01:09:30 momjian Exp $
  *
  * NOTES
  *	  Most of the read functions for plan nodes are tested. (In fact, they
@@ -92,7 +92,7 @@ _readQuery()
 		NotifyStmt *n = makeNode(NotifyStmt);
 
 		n->relname = palloc(length + 1);
-		strNcpy(n->relname, token, length);
+		StrNCpy(n->relname, token, length+1);
 		local_node->utilityStmt = (Node *) n;
 	}
 
@@ -111,7 +111,7 @@ _readQuery()
 	else
 	{
 		local_node->uniqueFlag = palloc(length + 1);
-		strNcpy(local_node->uniqueFlag, token, length);
+		StrNCpy(local_node->uniqueFlag, token, length+1);
 	}
 
 	token = lsptok(NULL, &length);		/* skip :targetlist */
@@ -1067,7 +1067,7 @@ _readAggreg()
 	token = lsptok(NULL, &length);		/* eat :aggname */
 	token = lsptok(NULL, &length);		/* get aggname */
 	local_node->aggname = (char *) palloc(length + 1);
-	strNcpy(local_node->aggname, token, length);
+	StrNCpy(local_node->aggname, token, length+1);
 
 	token = lsptok(NULL, &length);		/* eat :basetype */
 	token = lsptok(NULL, &length);		/* get basetype */
diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c
index 25135893a75d442c57f9ecdd07db4d7e7afd5e87..2e21cc9c57345ae1db99f34c6aca4cea087913bd 100644
--- a/src/backend/parser/analyze.c
+++ b/src/backend/parser/analyze.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.46 1997/10/16 06:58:38 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.47 1997/10/25 01:09:35 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1150,7 +1150,7 @@ makeTargetNames(ParseState *pstate, List *cols)
 			Ident	   *id = makeNode(Ident);
 
 			id->name = palloc(NAMEDATALEN);
-			strNcpy(id->name, attr[i]->attname.data, NAMEDATALEN - 1);
+			StrNCpy(id->name, attr[i]->attname.data, NAMEDATALEN);
 			id->indirection = NIL;
 			id->isRel = false;
 			if (tl == NIL)
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index c4b219438fb534b808e593a0ad1f2c87c643a79b..d4141017c65507b19617c30f1d1e7031923a44c4 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -10,7 +10,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.56 1997/10/09 05:43:59 thomas Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.57 1997/10/25 01:09:41 momjian Exp $
  *
  * HISTORY
  *	  AUTHOR			DATE			MAJOR EVENT
@@ -3117,7 +3117,7 @@ opt_id:  Id										{ $$ = $1; }
 relation_name:	SpecialRuleRelation
 				{
 					$$ = $1;
-					strNcpy(saved_relname, $1, NAMEDATALEN-1);
+					StrNCpy(saved_relname, $1, NAMEDATALEN);
 				}
 		| ColId
 				{
@@ -3129,7 +3129,7 @@ relation_name:	SpecialRuleRelation
 						elog(WARN,"%s cannot be accessed by users",$1);
 					else
 						$$ = $1;
-					strNcpy(saved_relname, $1, NAMEDATALEN-1);
+					StrNCpy(saved_relname, $1, NAMEDATALEN);
 				}
 		;
 
diff --git a/src/backend/port/aix/dlfcn.c b/src/backend/port/aix/dlfcn.c
index e42b00f247c6cfc1ae89d5af088575bb36629fde..1c34186dc4bc6faa22a93bdb62e9429ce0ce9684 100644
--- a/src/backend/port/aix/dlfcn.c
+++ b/src/backend/port/aix/dlfcn.c
@@ -537,7 +537,7 @@ readExports(ModulePtr mp)
 			 * first SYMNMLEN chars and make sure we have a zero byte at
 			 * the end.
 			 */
-			strNcpy(tmpsym, ls->l_name, SYMNMLEN);
+			StrNCpy(tmpsym, ls->l_name, SYMNMLEN+1);
 			symname = tmpsym;
 		}
 		ep->name = strdup(symname);
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index 248d8ab144371e3e8ce919beffe448ca308040c1..a936fff9eba3bb8d62fbe093524d1c7750d4a12a 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -10,7 +10,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.58 1997/09/18 20:21:08 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.59 1997/10/25 01:09:55 momjian Exp $
  *
  * NOTES
  *
@@ -717,7 +717,7 @@ ConnStartup(Port *port, int *status,
 
 	msgType = (MsgType) ntohl(port->buf.msgtype);
 
-	strNcpy(namebuf, sp.user, NAMEDATALEN - 1);
+	StrNCpy(namebuf, sp.user, NAMEDATALEN);
 	if (!namebuf[0])
 	{
 		strncpy(errormsg,
@@ -1232,15 +1232,15 @@ DoExec(StartupInfo *packet, int portFd)
 	sprintf(portbuf, "-P%d", portFd);
 	av[ac++] = portbuf;
 
-	strNcpy(argbuf, packet->options, ARGV_SIZE);
+	StrNCpy(argbuf, packet->options, ARGV_SIZE);
 	strncat(argbuf, ExtraOptions, ARGV_SIZE);
 	argbuf[(2 * ARGV_SIZE)] = '\0';
 	split_opts(av, &ac, argbuf);
 
 	if (packet->database[0])
-		strNcpy(dbbuf, packet->database, ARGV_SIZE);
+		StrNCpy(dbbuf, packet->database, ARGV_SIZE);
 	else
-		strNcpy(dbbuf, packet->user, NAMEDATALEN - 1);
+		StrNCpy(dbbuf, packet->user, NAMEDATALEN);
 	av[ac++] = dbbuf;
 
 	av[ac] = (char *) NULL;
diff --git a/src/backend/storage/smgr/md.c b/src/backend/storage/smgr/md.c
index 48d221ffd189d39e65a367f327b8eacc9915c0a2..8be087d61b839de298600db792c888ac68452186 100644
--- a/src/backend/storage/smgr/md.c
+++ b/src/backend/storage/smgr/md.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/storage/smgr/md.c,v 1.22 1997/09/18 20:21:45 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/storage/smgr/md.c,v 1.23 1997/10/25 01:10:04 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -172,7 +172,7 @@ mdunlink(Relation reln)
 	 * do this.
 	 */
 
-	strNcpy(fname, RelationGetRelationName(reln)->data, NAMEDATALEN - 1);
+	StrNCpy(fname, RelationGetRelationName(reln)->data, NAMEDATALEN);
 
 	if (FileNameUnlink(fname) < 0)
 		return (SM_FAIL);
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index 010ea1214c3233d3d623017782ebb017c58f8b3e..fb5adb35abc22c6f653315e3ded4afa2150154cb 100644
--- a/src/backend/tcop/postgres.c
+++ b/src/backend/tcop/postgres.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.49 1997/09/18 20:22:03 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.50 1997/10/25 01:10:16 momjian Exp $
  *
  * NOTES
  *	  this is the "main" module of the postgres backend and
@@ -1088,7 +1088,7 @@ PostgresMain(int argc, char *argv[])
 				 *	o - send output (stdout and stderr) to the given file
 				 * ----------------
 				 */
-				strNcpy(OutputFileName, optarg, MAXPGPATH);
+				StrNCpy(OutputFileName, optarg, MAXPGPATH);
 				break;
 
 			case 'p':			/* started by postmaster */
@@ -1391,7 +1391,7 @@ PostgresMain(int argc, char *argv[])
 	if (IsUnderPostmaster == false)
 	{
 		puts("\nPOSTGRES backend interactive interface");
-		puts("$Revision: 1.49 $ $Date: 1997/09/18 20:22:03 $");
+		puts("$Revision: 1.50 $ $Date: 1997/10/25 01:10:16 $");
 	}
 
 	/* ----------------
diff --git a/src/backend/tcop/variable.c b/src/backend/tcop/variable.c
index 2f41cedf033a47d83486b1f8450d26e8c57114e1..260fdd6eb5aa6adce1a7c9994e0ef2b89fded491 100644
--- a/src/backend/tcop/variable.c
+++ b/src/backend/tcop/variable.c
@@ -2,7 +2,7 @@
  * Routines for handling of 'SET var TO', 'SHOW var' and 'RESET var'
  * statements.
  *
- * $Id: variable.c,v 1.16 1997/09/08 21:47:59 momjian Exp $
+ * $Id: variable.c,v 1.17 1997/10/25 01:10:22 momjian Exp $
  *
  */
 
@@ -73,7 +73,7 @@ get_token(char **tok, char **val, const char *str)
 	}
 
 	*tok = (char *) PALLOC(len + 1);
-	strNcpy(*tok, start, len);
+	StrNCpy(*tok, start, len+1);
 
 	/* skip white spaces */
 	while (isspace(*str))
@@ -119,7 +119,7 @@ get_token(char **tok, char **val, const char *str)
 	}
 
 	*val = (char *) PALLOC(len + 1);
-	strNcpy(*val, start, len);
+	StrNCpy(*val, start, len+1);
 
 	/* skip white spaces */
 	while (isspace(*str))
diff --git a/src/backend/tioga/tgRecipe.c b/src/backend/tioga/tgRecipe.c
index cb3e0fc6d3f872e27620fdca3c1bfba7d53a3cb0..fd45f489f11270ceb7ad7fe31c33ef5cdeca5a95 100644
--- a/src/backend/tioga/tgRecipe.c
+++ b/src/backend/tioga/tgRecipe.c
@@ -11,7 +11,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/tioga/Attic/tgRecipe.c,v 1.6 1997/09/08 21:48:01 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/tioga/Attic/tgRecipe.c,v 1.7 1997/10/25 01:10:26 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -108,7 +108,7 @@ first character\n", ARRAY_LEFT_DELIM);
 												 * extra character for \0
 												 * anyway */
 		word = (char *) malloc(nextlen);
-		strNcpy(word, beginQuote + 1, nextlen - 1);
+		StrNCpy(word, beginQuote + 1, nextlen);
 		addArr_TgString(result, (TgString *) & word);
 		free(word);
 		str = endQuote + 1;
diff --git a/src/backend/utils/adt/char.c b/src/backend/utils/adt/char.c
index 9d719319d9a810cb1bcd562e5778fef12cf7e410..0ad01eca1b75e317b8371b82e383f1d873c29f8e 100644
--- a/src/backend/utils/adt/char.c
+++ b/src/backend/utils/adt/char.c
@@ -12,7 +12,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/char.c,v 1.11 1997/09/08 21:48:18 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/char.c,v 1.12 1997/10/25 01:10:32 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -124,7 +124,7 @@ char16out(char *s)
 		result[1] = '\0';
 	}
 	else
-		strNcpy(result, s, 16);
+		StrNCpy(result, s, 16);
 	return (result);
 }
 
@@ -282,7 +282,7 @@ char2out(uint16 s)
 {
 	char	   *result = (char *) palloc(3);
 
-	strNcpy(result, (char *) &s, 2);
+	StrNCpy(result, (char *) &s, 3);
 
 	return (result);
 }
@@ -349,7 +349,7 @@ uint32		s;
 {
 	char	   *result = (char *) palloc(5);
 
-	strNcpy(result, (char *) &s, 4);
+	StrNCpy(result, (char *) &s, 5);
 
 	return (result);
 }
@@ -421,7 +421,7 @@ char8out(char *s)
 		result[1] = '\0';
 	}
 	else
-		strNcpy(result, s, 8);
+		StrNCpy(result, s, 9);
 	return (result);
 }
 
diff --git a/src/backend/utils/adt/filename.c b/src/backend/utils/adt/filename.c
index e8bfba41c9670de54305bff57fdeb5f335b6698b..b618a3d6b8a2fd9ffd43340dbe5a3cb5b57e416b 100644
--- a/src/backend/utils/adt/filename.c
+++ b/src/backend/utils/adt/filename.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/filename.c,v 1.10 1997/09/08 02:30:40 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/filename.c,v 1.11 1997/10/25 01:10:36 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -59,7 +59,7 @@ filename_in(char *file)
 		else
 		{
 			/* Someone else's directory */
-			char		name[16],
+			char		name[17],
 					   *p;
 			struct passwd *pw;
 			int			len;
@@ -72,7 +72,7 @@ filename_in(char *file)
 			else
 			{
 				len = (p - file) - 1;
-				strNcpy(name, file + 1, len);
+				StrNCpy(name, file + 1, len+1);
 			}
 			/* printf("name: %s\n"); */
 			if ((pw = getpwnam(name)) == NULL)
@@ -102,7 +102,7 @@ filename_in(char *file)
 		else
 		{
 			len = (p - file) - 1;
-			strNcpy(environment, file + 1, len);
+			StrNCpy(environment, file + 1, len+1);
 		}
 		envirp = getenv(environment);
 		if (envirp)
diff --git a/src/backend/utils/adt/like.c b/src/backend/utils/adt/like.c
index 4a758b0ba28005bdb1b63eb4f1f336e0c8429e0d..7886354e908d26cb8dc6e6ab5b5857d08dcd2bd7 100644
--- a/src/backend/utils/adt/like.c
+++ b/src/backend/utils/adt/like.c
@@ -48,7 +48,7 @@ fixedlen_like(char *s, struct varlena * p, int charlen)
 
 	/* be sure sterm is null-terminated */
 	sterm = (char *) palloc(charlen + 1);
-	strNcpy(sterm, s, charlen);
+	StrNCpy(sterm, s, charlen+1);
 
 	/*
 	 * p is a text = varlena, not a string so we have to make a string
@@ -150,7 +150,7 @@ textnlike(struct varlena * s, struct varlena * p)
 }
 
 
-/*	$Revision: 1.9 $
+/*	$Revision: 1.10 $
 **	"like.c" A first attempt at a LIKE operator for Postgres95.
 **
 **	Originally written by Rich $alz, mirror!rs, Wed Nov 26 19:03:17 EST 1986.
diff --git a/src/backend/utils/adt/name.c b/src/backend/utils/adt/name.c
index 977360cc954fda1dd1a10d4bed88f2ca881df779..fb281a3e4e3fd522d529d82eb5835561e54366bf 100644
--- a/src/backend/utils/adt/name.c
+++ b/src/backend/utils/adt/name.c
@@ -11,7 +11,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/name.c,v 1.9 1997/09/08 21:48:33 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/name.c,v 1.10 1997/10/25 01:10:40 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -41,7 +41,7 @@ namein(char *s)
 		return (NULL);
 	result = (NameData *) palloc(NAMEDATALEN);
 	/* always keep it null-padded */
-	strNcpy(result->data, s, NAMEDATALEN - 1);
+	StrNCpy(result->data, s, NAMEDATALEN);
 	return (result);
 }
 
@@ -159,7 +159,7 @@ namestrcpy(Name name, char *str)
 {
 	if (!name || !str)
 		return (-1);
-	strNcpy(name->data, str, NAMEDATALEN - 1);
+	StrNCpy(name->data, str, NAMEDATALEN);
 	return (0);
 }
 
diff --git a/src/backend/utils/adt/oidname.c b/src/backend/utils/adt/oidname.c
index 09bee543f8098295a75a0a553802ee69abf6e57c..27d28a072ec32cbf3e311e0c90eb43a382798d2d 100644
--- a/src/backend/utils/adt/oidname.c
+++ b/src/backend/utils/adt/oidname.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/oidname.c,v 1.8 1997/09/18 20:22:16 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/oidname.c,v 1.9 1997/10/25 01:10:41 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -37,7 +37,7 @@ oidnamein(char *inStr)
 		oc->id = (Oid) pg_atoi(inStr, sizeof(Oid), ',');
 		/* copy one less to ensure null-padding */
 		++inptr;
-		strNcpy(oc->name.data, inptr, NAMEDATALEN - 1);
+		StrNCpy(oc->name.data, inptr, NAMEDATALEN);
 	}
 	else
 		elog(WARN, "Bad input data for type oidname");
diff --git a/src/backend/utils/adt/regexp.c b/src/backend/utils/adt/regexp.c
index b172cc6b486c75c9c16ad30ae6a8ebef9a72711d..21b34249bd4113f4fdc8ef6a701d1729d69476bd 100644
--- a/src/backend/utils/adt/regexp.c
+++ b/src/backend/utils/adt/regexp.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/regexp.c,v 1.10 1997/09/08 21:48:40 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/regexp.c,v 1.11 1997/10/25 01:10:44 momjian Exp $
  *
  *		Alistair Crooks added the code for the regex caching
  *		agc - cached the regular expressions used - there's a good chance
@@ -189,7 +189,7 @@ fixedlen_regexeq(char *s, struct varlena * p, int charlen, int cflags)
 
 	/* be sure sterm is null-terminated */
 	sterm = (char *) palloc(charlen + 1);
-	strNcpy(sterm, s, charlen);
+	StrNCpy(sterm, s, charlen+1);
 
 	result = RE_compile_and_execute(p, sterm, cflags);
 
diff --git a/src/backend/utils/adt/regproc.c b/src/backend/utils/adt/regproc.c
index ea3a66fe05e7dd60f4215b45e8ad2717a1e8f401..70c97e0833f62d4a59dc7ea2cb84c8c5e5d0b28c 100644
--- a/src/backend/utils/adt/regproc.c
+++ b/src/backend/utils/adt/regproc.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.7 1997/09/08 02:30:58 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.8 1997/10/25 01:10:45 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -133,7 +133,7 @@ regprocout(RegProcedure proid)
 							  RelationGetTupleDescriptor(proc), &isnull);
 			if (!isnull)
 			{
-				strNcpy(result, s, 16);
+				StrNCpy(result, s, 16);
 				break;
 			}
 			elog(FATAL, "regprocout: null procedure %d", proid);
diff --git a/src/backend/utils/adt/varchar.c b/src/backend/utils/adt/varchar.c
index a9977fa6414e2ec0d2724db9caa6ebe71dab13eb..9b2f4129c8b77cc898a0aef2c2596eebcc52df1e 100644
--- a/src/backend/utils/adt/varchar.c
+++ b/src/backend/utils/adt/varchar.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/varchar.c,v 1.10 1997/09/08 02:31:05 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/varchar.c,v 1.11 1997/10/25 01:10:50 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -106,7 +106,7 @@ bpcharout(char *s)
 	{
 		len = *(int32 *) s - 4;
 		result = (char *) palloc(len + 1);
-		strNcpy(result, s + 4, len);	/* these are blank-padded */
+		StrNCpy(result, s + 4, len+1);	/* these are blank-padded */
 	}
 	return (result);
 }
@@ -145,7 +145,7 @@ varcharin(char *s, int dummy, int typlen)
 
 	result = (char *) palloc(typlen);
 	*(int32 *) result = typlen;
-	strncpy(result + 4, s, len);
+	strncpy(result + 4, s, len+1);
 
 	return (result);
 }
@@ -166,7 +166,7 @@ varcharout(char *s)
 	{
 		len = *(int32 *) s - 4;
 		result = (char *) palloc(len + 1);
-		strNcpy(result, s + 4, len);
+		StrNCpy(result, s + 4, len+1);
 	}
 	return (result);
 }
diff --git a/src/backend/utils/sort/psort.c b/src/backend/utils/sort/psort.c
index 5af863b6e01de53b82948fbb8ea647cb2b93e581..4a490cc059c76cbdd979668f2be237b7ccd94bd7 100644
--- a/src/backend/utils/sort/psort.c
+++ b/src/backend/utils/sort/psort.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/sort/Attic/psort.c,v 1.26 1997/10/15 06:36:08 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/sort/Attic/psort.c,v 1.27 1997/10/25 01:10:52 momjian Exp $
  *
  * NOTES
  *		Sorts the first relation into the second relation.
@@ -1006,7 +1006,7 @@ gettape()
 	 * now, copy template with final null into palloc'd space
 	 */
 
-	strNcpy(tp->tl_name, uniqueName, MAXPGPATH-1);
+	StrNCpy(tp->tl_name, uniqueName, MAXPGPATH);
 
 
 	file = AllocateFile(tp->tl_name, "w+");
diff --git a/src/include/c.h b/src/include/c.h
index 8314f566a2c09d4e2f2ff3e82bfd51c2b8f9e7e0..f38a8b10f0904e9a0307e7168f32eda3df87ee1b 100644
--- a/src/include/c.h
+++ b/src/include/c.h
@@ -7,7 +7,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: c.h,v 1.22 1997/09/18 18:48:32 momjian Exp $
+ * $Id: c.h,v 1.23 1997/10/25 01:10:58 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -29,7 +29,7 @@
  *		5)		IsValid macros for system types
  *		6)		offsetof, lengthof, endof
  *		7)		exception handling definitions, Assert, Trap, etc macros
- *		8)		Min, Max, Abs, strNcpy macros
+ *		8)		Min, Max, Abs, StrNCpy macros
  *		9)		externs
  *		10)		 Berkeley-specific defs
  *		11)		system-specific hacks
@@ -686,11 +686,15 @@ typedef struct Exception
 #define Abs(x)			((x) >= 0 ? (x) : -(x))
 
 /*
- * strNcpy --
+ * StrNCpy --
  *		Does string copy, and forces terminating NULL
  */
 /* we do this so if the macro is used in an if action, it will work */
-#define strNcpy(dst,src,len)	(strncpy((dst),(src),(len)),*((dst)+(len))='\0')
+#define StrNCpy(dst,src,len)	do { \
+							strncpy((dst),(src),(len)); \
+							if (len > 0) \
+								*((dst)+(len)-1)='\0'; \
+							} while (0)
 
 /* Get a bit mask of the bits set in non-int32 aligned addresses */
 #define INT_ALIGN_MASK (sizeof(int32) - 1)