diff --git a/src/backend/commands/_deadcode/version.c b/src/backend/commands/_deadcode/version.c
index bfc657778dfa284e9bdd6beaa77d6850b39820fa..c823f0d0dd9b006ee0366dc0e4695fc6a3d179f8 100644
--- a/src/backend/commands/_deadcode/version.c
+++ b/src/backend/commands/_deadcode/version.c
@@ -10,7 +10,7 @@
  *  
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/commands/_deadcode/Attic/version.c,v 1.3 1996/11/06 08:21:42 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/commands/_deadcode/Attic/version.c,v 1.4 1997/08/12 20:15:13 momjian Exp $
  *
  * NOTES
  *    At the point the version is defined, 2 physical relations are created
@@ -106,12 +106,12 @@ DefineVersion(char *name, char *fromRelname, char *date)
     if (date == NULL) {
 	/* no time ranges */
 	bname = fromRelname;
-	(void) strcpy(saved_basename, (char *) bname);
+	strcpy(saved_basename, (char *) bname);
 	*saved_snapshot = (char)NULL;
     } else {
 	/* version is a snapshot */
 	bname = fromRelname;
-	(void) strcpy(saved_basename, (char *) bname);
+	strcpy(saved_basename, (char *) bname);
 	sprintf(saved_snapshot, "['%s']", date);
     }
     
diff --git a/src/backend/commands/async.c b/src/backend/commands/async.c
index b8627d1e47aa8363a60ecbf559a97d3966d433e2..7d24261c644fc2cacdd7b108b4438fd54ab65a1f 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.14 1997/08/03 02:34:34 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/commands/async.c,v 1.15 1997/08/12 20:15:08 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -456,8 +456,7 @@ Async_Listen(char *relname, int pid)
      * to unlisten prior to dying.
      */
     relnamei = malloc(NAMEDATALEN); /* persists to process exit */
-    strncpy(relnamei, relname, NAMEDATALEN);
-    relnamei[NAMEDATALEN-1] = '\0';
+    strNcpy(relnamei, relname, NAMEDATALEN-1);
     on_exitpg(Async_UnlistenOnExit, (caddr_t) relnamei);
 }
 
diff --git a/src/backend/commands/creatinh.c b/src/backend/commands/creatinh.c
index 1a184615bf13cdd0e8fd305232b3239bb6f87dfd..0934e4197a5711d3d01eb91dbaedd1fb6ed65537 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.8 1997/08/03 02:34:53 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/commands/Attic/creatinh.c,v 1.9 1997/08/12 20:15:10 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -61,8 +61,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);  /* make full length for copy */
-    relname[NAMEDATALEN-1] = '\0';
+    strNcpy(relname,stmt->relname,NAMEDATALEN-1);  /* make full length for copy */
 
     /* ----------------
      * 	Handle parameters
diff --git a/src/backend/commands/recipe.c b/src/backend/commands/recipe.c
index ed94f0c18ec44c3f98d16c6011843683ff5c90e6..e6aa009bd33f20f886dc231d4f59d31501d3eb22 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.5 1996/11/06 08:21:37 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/commands/Attic/recipe.c,v 1.6 1997/08/12 20:15:11 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1149,8 +1149,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);
-	prefix[4] = '\0';
+	strNcpy(prefix,rte->refname,4);
 	if (strcmp(prefix,"tee_") == 0) {
 	    /* okay, we found a tee node entry in the range table */
 
diff --git a/src/backend/commands/rename.c b/src/backend/commands/rename.c
index 87f995a2d7d789bc5c9485fc365799698d4d5ee9..c1016a91c917e07efb606cfb53d6546daaf3d4ac 100644
--- a/src/backend/commands/rename.c
+++ b/src/backend/commands/rename.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/commands/Attic/rename.c,v 1.4 1996/11/10 02:59:42 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/commands/Attic/rename.c,v 1.5 1997/08/12 20:15:12 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -235,8 +235,8 @@ renamerel(char oldrelname[], char newrelname[])
     }
     
     /* rename the directory first, so if this fails the rename's not done */
-    (void) strcpy(oldpath, relpath(oldrelname));
-    (void) strcpy(newpath, relpath(newrelname));
+    strcpy(oldpath, relpath(oldrelname));
+    strcpy(newpath, relpath(newrelname));
     if (rename(oldpath, newpath) < 0)
 	elog(WARN, "renamerel: unable to rename file: %m");
     
diff --git a/src/backend/lib/stringinfo.c b/src/backend/lib/stringinfo.c
index fb992a19c8882ad362ea51360cc4ef895e208764..18cfc89f982d11a68085ea0e4612359f6f414ede 100644
--- a/src/backend/lib/stringinfo.c
+++ b/src/backend/lib/stringinfo.c
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/lib/stringinfo.c,v 1.2 1996/11/06 08:27:16 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/lib/stringinfo.c,v 1.3 1997/08/12 20:15:15 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -111,6 +111,6 @@ appendStringInfo(StringInfo str, char *buffer)
      * NOTE: this is a text string (i.e. printable characters)
      * so 'strcat' will do the job (no need to use 'bcopy' et all...)
      */
-    (void) strcat(str->data, buffer);
+    strcat(str->data, buffer);
     str->len += buflen;
 }
diff --git a/src/backend/libpq/auth.c b/src/backend/libpq/auth.c
index b191c03cbfff27747a81626cb47c81b66e6b687a..f325fa0a06ab58f17188fe59a9dadcab7bfd7cb7 100644
--- a/src/backend/libpq/auth.c
+++ b/src/backend/libpq/auth.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/libpq/auth.c,v 1.11 1997/03/25 00:54:15 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/libpq/auth.c,v 1.12 1997/08/12 20:15:17 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -302,10 +302,10 @@ pg_krb5_recvauth(int sock,
      * easy, we construct our own name and parse it.  See note on
      * canonicalization above.
      */
-    (void) strcpy(servbuf, PG_KRB_SRVNAM);
+    strcpy(servbuf, PG_KRB_SRVNAM);
     *(hostp = servbuf + (sizeof(PG_KRB_SRVNAM) - 1)) = '/';
     if (gethostname(++hostp, MAXHOSTNAMELEN) < 0)
-	(void) strcpy(hostp, "localhost");
+	strcpy(hostp, "localhost");
     if (hostp = strchr(hostp, '.'))
 	*hostp = '\0';
     if (code = krb5_parse_name(servbuf, &server)) {
diff --git a/src/backend/libpq/be-fsstubs.c b/src/backend/libpq/be-fsstubs.c
index f71b5b2892d487c16061f8ccff5cee14c31ab394..c1b36b889489b0662c9e0de3871918d79446a80f 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.10 1997/06/10 13:01:32 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/libpq/be-fsstubs.c,v 1.11 1997/08/12 20:15:18 momjian Exp $
  *
  * NOTES
  *    This should be moved to a more appropriate place.  It is here
@@ -257,8 +257,7 @@ lo_import(text *filename)
     /*
      * open the file to be read in
      */
-    strncpy(fnamebuf, VARDATA(filename), VARSIZE(filename) - VARHDRSZ);
-    fnamebuf[VARSIZE(filename) - VARHDRSZ] = '\0';
+    strNcpy(fnamebuf, VARDATA(filename), VARSIZE(filename) - VARHDRSZ);
     fd = open(fnamebuf, O_RDONLY, 0666);
     if (fd < 0)  {   /* error */
 	elog(WARN, "be_lo_import: can't open unix file\"%s\"\n", 
@@ -325,8 +324,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);
-    fnamebuf[VARSIZE(filename) - VARHDRSZ] = '\0';
+    strNcpy(fnamebuf, VARDATA(filename), VARSIZE(filename) - VARHDRSZ);
     fd = open(fnamebuf, O_CREAT|O_WRONLY, 0666);
     (void) umask(oumask);
     if (fd < 0)  {   /* error */
diff --git a/src/backend/libpq/be-pqexec.c b/src/backend/libpq/be-pqexec.c
index b880ba7100964e2a5efc824abb13ff7ab6361c2d..031f7ea8a9e716522d69aac1b7237f18fe7fc724 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.2 1996/11/06 08:48:26 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/libpq/Attic/be-pqexec.c,v 1.3 1997/08/12 20:15:19 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -223,7 +223,7 @@ strmake(char *str, int len)
     if (len <= 0) len = strlen(str);
     
     newstr = (char *) palloc((unsigned) len+1);
-    (void) strncpy(newstr, str, len);
+    strNcpy(newstr, str, len);
     newstr[len] = (char) 0;
     return newstr;
 }
diff --git a/src/backend/libpq/password.c b/src/backend/libpq/password.c
index 55f77508bbf2f7eb1f4a59c2c4d409860e005ac9..555e9c645ec0025575a74a39e65dccc2dc5e3b6c 100644
--- a/src/backend/libpq/password.c
+++ b/src/backend/libpq/password.c
@@ -80,8 +80,7 @@ verify_password(char *user, char *password, Port *port,
 	/* kill the newline */
 	test_pw[strlen(test_pw)-1] = '\0';
 
-	strncpy(salt, test_pw, 2);
-	salt[2] = '\0';
+	strNcpy(salt, test_pw, 2);
 
 	if(strcmp(user, test_user) == 0) {
 	    /* we're outta here one way or the other. */
diff --git a/src/backend/libpq/portal.c b/src/backend/libpq/portal.c
index e54e18676f8f54a4c6e3ac5624469925df5e1a93..2ddeab1a701a9d5f59a3b74613fdcd983d183a7b 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.4 1996/11/06 08:48:28 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/libpq/Attic/portal.c,v 1.5 1997/08/12 20:15:22 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -144,7 +144,7 @@ PQpnames(char **pnames, int rule_p)
     for (i = 0; i < portals_array_size; ++i) {
 	if (portals[i] && portals[i]->portal) {
 	    if (!rule_p || portals[i]->portal->rule_p) {
-		(void) strncpy(pnames[cur_pname], portals[i]->name, PortalNameLength);
+		strncpy(pnames[cur_pname], portals[i]->name, PortalNameLength);
 		++cur_pname;
 	    }
 	}
@@ -710,7 +710,7 @@ PQappendNotify(char *relname, int pid)
 	pqNotifyList = DLNewList();
     
     p = (PQNotifyList*)pbuf_alloc(sizeof(PQNotifyList));
-    strncpy(p->relname, relname, NAMEDATALEN);
+    strNcpy(p->relname, relname, NAMEDATALEN-1);
     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 e0390c5ae793eb568a58a507667cea78f6bc618b..b7a527dcfafcd47e26ca0a67df0bd8d3e17406f9 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.3 1996/11/06 08:48:29 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/libpq/Attic/portalbuf.c,v 1.4 1997/08/12 20:15:23 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -377,8 +377,7 @@ void
 pbuf_setportalinfo(PortalEntry *entry, char *pname)
 {
     if (entry)
-	strncpy(entry->name, pname, PortalNameLength-1);
-    entry->name[PortalNameLength-1] = '\0';
+	strNcpy(entry->name, pname, PortalNameLength-1);
 }
 
 /* --------------------------------
diff --git a/src/backend/libpq/pqcomm.c b/src/backend/libpq/pqcomm.c
index 8ba16383c28d383917eafec13ac9425b6d21c1a8..78767a4a1c42363ee67b879182fd50dbc4eef47b 100644
--- a/src/backend/libpq/pqcomm.c
+++ b/src/backend/libpq/pqcomm.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/libpq/pqcomm.c,v 1.17 1997/07/28 00:54:18 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/libpq/pqcomm.c,v 1.18 1997/08/12 20:15:24 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -113,7 +113,7 @@ pq_getc(FILE* fin)
 void
 pq_gettty(char *tp)
 {	
-    (void) strncpy(tp, ttyname(0), 19);
+    strncpy(tp, ttyname(0), 19);
 }
 
 /* --------------------------------
@@ -585,8 +585,8 @@ StreamServerPort(char *hostName, short portName, int *fdP)
 		       "FATAL: StreamServerPort: bind() failed: errno=%d\n",
 		       errno);
 	pqdebug("%s", PQerrormsg);
-	(void) strcat(PQerrormsg, "\tIs another postmaster already running on that port?\n");
-	(void) strcat(PQerrormsg, "\tIf not, wait a few seconds and retry.\n");
+	strcat(PQerrormsg, "\tIs another postmaster already running on that port?\n");
+	strcat(PQerrormsg, "\tIf not, wait a few seconds and retry.\n");
 	fputs(PQerrormsg, stderr);
 	return(STATUS_ERROR);
     }
diff --git a/src/backend/nodes/print.c b/src/backend/nodes/print.c
index fd58f482b9ab6e3434a6b751b40028a15e6f4d3d..30553fbb5bf0f6240c9c5af22f811cc731b00312 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.4 1997/08/03 02:35:13 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/nodes/print.c,v 1.5 1997/08/12 20:15:27 momjian Exp $
  *
  * HISTORY
  *    AUTHOR		DATE		MAJOR EVENT
@@ -349,15 +349,13 @@ print_plan_recursive (Plan* p, Query *parsetree, int indentLevel, char* label)
     if (IsA(p,Scan) || IsA(p,SeqScan)) {
 	RangeTblEntry *rte;
 	rte = rt_fetch(((Scan*)p)->scanrelid, parsetree->rtable);
-	strncpy(extraInfo, rte->relname, NAMEDATALEN);
-	extraInfo[NAMEDATALEN-1] = '\0';
+	strNcpy(extraInfo, rte->relname, NAMEDATALEN-1);
     } else 
 	if (IsA(p,IndexScan)) {
-	    strncpy(extraInfo,
+	    strNcpy(extraInfo,
 		    ((RangeTblEntry*)(nth(((IndexScan*)p)->scan.scanrelid - 1,
 					  parsetree->rtable)))->relname,
-		    NAMEDATALEN);
-	extraInfo[NAMEDATALEN-1] = '\0';
+		    NAMEDATALEN-1);
     } else
 	extraInfo[0] = '\0';
     if (extraInfo[0] != '\0')
diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c
index fc5797e2be4d39331a97749c0e03ef93d4668901..736873bcba2bdd7c9f2b8d7d36e77b18de35326a 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.5 1997/05/12 07:17:23 vadim Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.6 1997/08/12 20:15:28 momjian Exp $
  *
  * NOTES
  *    Most of the read functions for plan nodes are tested. (In fact, they
@@ -87,8 +87,7 @@ _readQuery()
     else {
 	   NotifyStmt *n = makeNode(NotifyStmt);
 	   n->relname = palloc(length + 1);
-	   strncpy(n->relname,token,length);
-	   n->relname[length] = '\0';
+	   strNcpy(n->relname,token,length);
 	   local_node->utilityStmt = (Node*)n;
        }
 
@@ -106,8 +105,7 @@ _readQuery()
       local_node->uniqueFlag = NULL;
     else {
       local_node->uniqueFlag = palloc(length + 1);
-      strncpy(local_node->uniqueFlag,token,length);
-      local_node->uniqueFlag[length] = '\0';
+      strNcpy(local_node->uniqueFlag,token,length);
     }
 
     token = lsptok(NULL, &length);    	/* skip :targetlist */
@@ -1033,8 +1031,7 @@ _readAggreg()
     token = lsptok(NULL, &length);    		/* eat :aggname */
     token = lsptok(NULL, &length);    		/* get aggname */
     local_node->aggname = (char*) palloc (length + 1);
-    memset (local_node->aggname, 0, length + 1);
-    strncpy (local_node->aggname, token, length);
+    strNcpy (local_node->aggname, token, length);
     
     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 fdfc8a7b1256fb72a0bee6092c37bde8d0054cb1..78e08ceeb12ecc34499458aa7738d09e60dcbf64 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.30 1997/08/03 02:35:28 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.31 1997/08/12 20:15:31 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1004,8 +1004,7 @@ makeTargetNames(ParseState *pstate, List *cols)
 	    Ident *id = makeNode(Ident);
 
 	    id->name = palloc(NAMEDATALEN);
-	    strncpy(id->name, attr[i]->attname.data, NAMEDATALEN);
-	    id->name[NAMEDATALEN-1]='\0';
+	    strNcpy(id->name, attr[i]->attname.data, NAMEDATALEN-1);
 	    id->indirection = NIL;
 	    id->isRel = false;
 	    if (tl == NIL)
diff --git a/src/backend/parser/catalog_utils.c b/src/backend/parser/catalog_utils.c
index 3407e2e0aed8f8e1c0ca63cfef35ad9a3a6a7a95..ebe970d13d7616c5f370f98c24a56933d088e0bc 100644
--- a/src/backend/parser/catalog_utils.c
+++ b/src/backend/parser/catalog_utils.c
@@ -6,7 +6,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/parser/Attic/catalog_utils.c,v 1.19 1997/07/24 20:13:01 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/parser/Attic/catalog_utils.c,v 1.20 1997/08/12 20:15:32 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1488,7 +1488,7 @@ func_error(char *caller, char *funcname, int nargs, Oid *argtypes)
 	    *ptr++ = ' ';
 	}
 	if (argtypes[i] != 0) {
-	    (void) strcpy(ptr, tname(get_id_type(argtypes[i])));
+	    strcpy(ptr, tname(get_id_type(argtypes[i])));
 	    *(ptr + NAMEDATALEN) = '\0';
 	} else
 	    strcpy(ptr, "opaque");
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 0dcc3613f0f88618d882e12f02702c00c61c8412..32d32e6b535894c2a4f84988cfd59e4c3623c8b8 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.34 1997/05/22 00:24:07 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.35 1997/08/12 20:15:33 momjian Exp $
  *
  * HISTORY
  *    AUTHOR		DATE		MAJOR EVENT
@@ -2190,8 +2190,7 @@ opt_id:  Id					{ $$ = $1; }
 relation_name:  SpecialRuleRelation
           	{
                    $$ = $1;
-                   strncpy(saved_relname, $1, NAMEDATALEN);
-                   saved_relname[NAMEDATALEN-1] = '\0';
+                   strNcpy(saved_relname, $1, NAMEDATALEN-1);
 	        }
 	| Id
 	  	{
@@ -2204,8 +2203,7 @@ relation_name:  SpecialRuleRelation
 		    } else {
 			$$ = $1;
 		    }
-                    strncpy(saved_relname, $1, NAMEDATALEN);
-                    saved_relname[NAMEDATALEN-1] = '\0';
+                    strNcpy(saved_relname, $1, NAMEDATALEN-1);
 		}
 	;
 
diff --git a/src/backend/port/BSD44_derived/dl.c b/src/backend/port/BSD44_derived/dl.c
index 6184c70adf432f2437737c62bedde0af85b38412..30f1737ed48aeac8ceb86e7c7b9f046970b7ab58 100644
--- a/src/backend/port/BSD44_derived/dl.c
+++ b/src/backend/port/BSD44_derived/dl.c
@@ -52,7 +52,7 @@ BSD44_derived_dlerror(void)
 {
 	static char	ret[BUFSIZ];
 
-	(void) strcpy(ret, error_message);
+	strcpy(ret, error_message);
 	error_message[0] = 0;
 	return((ret[0] == 0) ? (char *) NULL : ret);
 }
diff --git a/src/backend/port/aix/dlfcn.c b/src/backend/port/aix/dlfcn.c
index 9ae113ce06ec0f1e75a893918216cf429c6d48fb..b164336d5fd4e61f2f7a70757d36756db6a8fb8d 100644
--- a/src/backend/port/aix/dlfcn.c
+++ b/src/backend/port/aix/dlfcn.c
@@ -466,8 +466,7 @@ static int readExports(ModulePtr mp)
 			 * must copy the first SYMNMLEN chars and make
 			 * sure we have a zero byte at the end.
 			 */
-			strncpy(tmpsym, ls->l_name, SYMNMLEN);
-			tmpsym[SYMNMLEN] = '\0';
+			strNcpy(tmpsym, ls->l_name, SYMNMLEN);
 			symname = tmpsym;
 		}
 		ep->name = strdup(symname);
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index c57a2b1b4d37661d35b3639a8ca27faad9404940..ddbf196160abf7a63a0b84f3e5b3c6566deebbdf 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.49 1997/08/03 02:36:01 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.50 1997/08/12 20:15:42 momjian Exp $
  *
  * NOTES
  *
@@ -241,7 +241,7 @@ PostmasterMain(int argc, char *argv[])
     
     if (!(hostName = getenv("PGHOST"))) {
         if (gethostname(hostbuf, MAXHOSTNAMELEN) < 0)
-            (void) strcpy(hostbuf, "localhost");
+            strcpy(hostbuf, "localhost");
         hostName = hostbuf;
     }
 
@@ -262,8 +262,8 @@ PostmasterMain(int argc, char *argv[])
              * were allocated. 
              */
             NBuffers = atol(optarg);
-            (void) strcat(ExtraOptions, " -B ");
-            (void) strcat(ExtraOptions, optarg);
+            strcat(ExtraOptions, " -B ");
+            strcat(ExtraOptions, optarg);
             break;
         case 'b': 
             /* Set the backend executable file to use. */
@@ -308,8 +308,8 @@ PostmasterMain(int argc, char *argv[])
              * Other options to pass to the backend on the
              * command line -- useful only for debugging.
              */
-            (void) strcat(ExtraOptions, " ");
-            (void) strcat(ExtraOptions, optarg);
+            strcat(ExtraOptions, " ");
+            strcat(ExtraOptions, optarg);
             break;
         case 'p': 
             /* Set PGPORT by hand. */
@@ -652,8 +652,7 @@ ConnStartup(Port *port, int *status,
 
     msgType = (MsgType) ntohl(port->buf.msgtype);
 
-    (void) strncpy(namebuf, sp.user, NAMEDATALEN);
-    namebuf[NAMEDATALEN-1] = '\0';
+    strNcpy(namebuf, sp.user, NAMEDATALEN-1);
     if (!namebuf[0]) {
         strncpy(errormsg, 
                 "No Postgres username specified in startup packet.",
@@ -1087,8 +1086,7 @@ DoExec(StartupInfo *packet, int portFd)
     int ac = 0;
     int i;
 
-    (void) strncpy(execbuf, Execfile, MAXPATHLEN);
-    execbuf[MAXPATHLEN - 1] = '\0';
+    strncpy(execbuf, Execfile, MAXPATHLEN-1);
     av[ac++] = execbuf;
     
     /* Tell the backend it is being called from the postmaster */
@@ -1111,7 +1109,7 @@ DoExec(StartupInfo *packet, int portFd)
     
     /* Pass the requested debugging output file */
     if (packet->tty[0]) {
-        (void) strncpy(ttybuf, packet->tty, ARGV_SIZE);
+        strncpy(ttybuf, packet->tty, ARGV_SIZE);
         av[ac++] = "-o";
         av[ac++] = ttybuf;
     }
@@ -1125,17 +1123,15 @@ DoExec(StartupInfo *packet, int portFd)
     (void) sprintf(portbuf, "-P%d", portFd);
     av[ac++] = portbuf;
     
-    (void) strncpy(argbuf, packet->options, ARGV_SIZE);
-    argbuf[ARGV_SIZE] = '\0';
-    (void) strncat(argbuf, ExtraOptions, 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])
-        (void) strncpy(dbbuf, packet->database, ARGV_SIZE);
+        strNcpy(dbbuf, packet->database, ARGV_SIZE);
     else
-        (void) strncpy(dbbuf, packet->user, NAMEDATALEN);
-    dbbuf[ARGV_SIZE] = '\0';
+        strNcpy(dbbuf, packet->user, NAMEDATALEN-1);
     av[ac++] = dbbuf;
     
     av[ac] = (char *) NULL;
diff --git a/src/backend/regex/regcomp.c b/src/backend/regex/regcomp.c
index aca663aac572f671cff5ec981d1d7f92d743e4ec..af6bede84bc6dfad50615bf040072586a8ec879a 100644
--- a/src/backend/regex/regcomp.c
+++ b/src/backend/regex/regcomp.c
@@ -1255,7 +1255,7 @@ register char *cp;
 		return;
 	}
 
-	(void) strcpy(cs->multis + oldend - 1, cp);
+	strcpy(cs->multis + oldend - 1, cp);
 	cs->multis[cs->smultis - 1] = '\0';
 }
 
diff --git a/src/backend/storage/smgr/md.c b/src/backend/storage/smgr/md.c
index 191cbfd1fcf8df4e3fee0d07e980e0b4643be500..f6ebe161bc860598c3eba37d97379df8c3b1ebf2 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.15 1997/08/03 02:36:22 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/storage/smgr/md.c,v 1.16 1997/08/12 20:15:48 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -167,8 +167,7 @@ mdunlink(Relation reln)
  ** to do this.
  */
 
-    strncpy(fname, RelationGetRelationName(reln)->data, NAMEDATALEN);
-    fname[NAMEDATALEN-1] = '\0';
+    strNcpy(fname, RelationGetRelationName(reln)->data, NAMEDATALEN-1);
 
     if (FileNameUnlink(fname) < 0)
 	return (SM_FAIL);
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index f5809739a5181557b786f06b04a51e8f5a36db99..4b802875f4768892937d3a456c37cf64844c4e2b 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.39 1997/08/06 05:38:35 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.40 1997/08/12 20:15:49 momjian Exp $
  *
  * NOTES
  *    this is the "main" module of the postgres backend and
@@ -300,7 +300,7 @@ SocketBackend(char *inBuf, bool multiplexedBackend)
      *  get input from the frontend
      * ----------------
      */
-    (void) strcpy(qtype, "?");
+    strcpy(qtype, "?");
     if (pq_getnchar(qtype,0,1) == EOF) {
         /* ------------
          *  when front-end applications quits/dies
@@ -865,7 +865,7 @@ PostgresMain(int argc, char *argv[])
        or 'localhost' */
     if (!(hostName = getenv("PGHOST"))) {
         if (gethostname(hostbuf, MAXHOSTNAMELEN) < 0)
-            (void) strcpy(hostbuf, "localhost");
+            strcpy(hostbuf, "localhost");
         hostName = hostbuf;
     }
 
@@ -1010,7 +1010,7 @@ PostgresMain(int argc, char *argv[])
              *  o - send output (stdout and stderr) to the given file
              * ----------------
              */
-            (void) strncpy(OutputFileName, optarg, MAXPGPATH);
+            strNcpy(OutputFileName, optarg, MAXPGPATH);
             break;
             
         case 'p':       /* started by postmaster */
@@ -1292,7 +1292,7 @@ PostgresMain(int argc, char *argv[])
      */
     if (IsUnderPostmaster == false) {
         puts("\nPOSTGRES backend interactive interface");
-        puts("$Revision: 1.39 $ $Date: 1997/08/06 05:38:35 $");
+        puts("$Revision: 1.40 $ $Date: 1997/08/12 20:15:49 $");
     }
     
     /* ----------------
diff --git a/src/backend/tcop/variable.c b/src/backend/tcop/variable.c
index 3efb344ec21fc3345f2ad49415f8f798a344f40a..c2a2a754e955b2e905167e0905824e9fa597ed3d 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.12 1997/06/20 17:17:03 thomas Exp $
+ * $Id: variable.c,v 1.13 1997/08/12 20:15:50 momjian Exp $
  *
  */
 
@@ -70,8 +70,7 @@ static const char *get_token(char **tok, char **val, const char *str)
     }
     
     *tok = (char*) PALLOC(len + 1);
-    strncpy (*tok, start, len);
-    (*tok)[len] = '\0';
+    strNcpy (*tok, start, len);
 
     /* skip white spaces */
     while ( isspace(*str)) str++;
@@ -110,8 +109,7 @@ static const char *get_token(char **tok, char **val, const char *str)
     }
     
     *val = (char*) PALLOC(len + 1);
-    strncpy (*val, start, len);
-    (*val)[len] = '\0';
+    strNcpy (*val, start, len);
 
     /* skip white spaces */
     while ( isspace(*str)) str++;
diff --git a/src/backend/tioga/tgRecipe.c b/src/backend/tioga/tgRecipe.c
index e51a61b94d44a4690c5940b4cdcb8af51a0f23e9..ef08f8e3f5808b39430329708dd9ce69605a89de 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.2 1996/11/03 06:52:45 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/tioga/Attic/tgRecipe.c,v 1.3 1997/08/12 20:15:52 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -100,8 +100,7 @@ first character\n", ARRAY_LEFT_DELIM);
     nextlen = endQuote - beginQuote; /* don't subtract one here because we
 				      need the extra character for \0 anyway */
     word = (char*) malloc(nextlen);
-    strncpy(word, beginQuote+1, nextlen-1);
-    word[nextlen-1] ='\0';
+    strNcpy(word, beginQuote+1, nextlen-1);
     addArr_TgString(result, (TgString*)&word);
     free (word);
     str = endQuote + 1;
diff --git a/src/backend/utils/adt/acl.c b/src/backend/utils/adt/acl.c
index 747846f7c3c33cdf5e97f1ca6231bdaf16bae799..c292dfe999507121e460d546f6f96d06e507ed75 100644
--- a/src/backend/utils/adt/acl.c
+++ b/src/backend/utils/adt/acl.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/utils/adt/acl.c,v 1.11 1997/08/03 02:36:41 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/utils/adt/acl.c,v 1.12 1997/08/12 20:15:54 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -245,17 +245,17 @@ aclitemout(AclItem *aip)
 	    
 	    elog(NOTICE, "aclitemout: usesysid %d not found",
 		 aip->ai_id);
-	    (void) strcat(p, tmp);
+	    strcat(p, tmp);
 	    pfree(tmp);
 	} else
-	    (void) strncat(p, (char *) &((Form_pg_user)
+	    strncat(p, (char *) &((Form_pg_user)
 					 GETSTRUCT(htp))->usename,
 			   sizeof(NameData));
 	break;
     case ACL_IDTYPE_GID:
-	(void) strcat(p, "group ");
+	strcat(p, "group ");
 	tmpname = get_groname(aip->ai_id);
-	(void) strncat(p, tmpname, NAMEDATALEN);
+	strncat(p, tmpname, NAMEDATALEN);
 	break;
     case ACL_IDTYPE_WORLD:
 	break;
diff --git a/src/backend/utils/adt/char.c b/src/backend/utils/adt/char.c
index cfbd286f475a58553430386ab09453641f2d7ab5..7b5ebf62e6e5c0d349a3366eacc7309097488f47 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.5 1997/06/11 05:17:58 vadim Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/utils/adt/char.c,v 1.6 1997/08/12 20:15:55 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -265,8 +265,7 @@ uint32 char4in(char *s)
     if (s == NULL)
 	return(0);
     
-    memset((char *) &res, 0, sizeof(res));
-    (void) strncpy((char *) &res, s, 4);
+    strncpy((char *) &res, s, 4);
     
     return(res);
 }
@@ -276,8 +275,7 @@ char *char4out(s)
 {
     char	*result = (char *) palloc(5);
     
-    memset(result, 0, 5);
-    (void) strncpy(result, (char *) &s, 4);
+    strNcpy(result, (char *) &s, 4);
     
     return(result);
 }
@@ -326,8 +324,7 @@ char *char8in(char *s)
 	return((char *) NULL);
     
     result = (char *) palloc(8);
-    memset(result, 0, 8);
-    (void) strncpy(result, s, 8);
+    strncpy(result, s, 8);
     return(result);
 }
 
@@ -335,12 +332,11 @@ char *char8out(char *s)
 {
     char	*result = (char *) palloc(9);
     
-    memset(result, 0, 9);
     if (s == NULL) {
 	result[0] = '-';
-    } else {
-	strncpy(result, s, 8);
-    }
+	result[1] = '\0';
+    } else
+	strNcpy(result, s, 8);
     return(result);
 }
 
diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c
index d9e19845326743a740f31db3513b06649233f1d0..0d75f44df6e97c23d41d49b0e90821cd03919528 100644
--- a/src/backend/utils/adt/date.c
+++ b/src/backend/utils/adt/date.c
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/utils/adt/date.c,v 1.10 1997/07/29 15:54:49 thomas Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/utils/adt/date.c,v 1.11 1997/08/12 20:15:57 momjian Exp $
  *
  * NOTES
  *   This code is actually (almost) unused.
@@ -200,7 +200,7 @@ reltime2tm(int32 time, struct tm *tm)
     timestring = (char *) palloc(Max(strlen(INVALID_RELTIME_STR),
 				     UNITMAXLEN) + 1);
     if (timevalue == INVALID_RELTIME) {
-	(void) strcpy(timestring,INVALID_RELTIME_STR);
+	strcpy(timestring,INVALID_RELTIME_STR);
 	return(timestring);
     }
     if (timevalue == 0)
@@ -259,19 +259,19 @@ char *tintervalout(TimeInterval interval)
     char	*i_str, *p;
     
     i_str = (char	*) palloc( T_INTERVAL_LEN );  /* ['...' '...'] */
-    (void) strcpy(i_str,"[\"");
+    strcpy(i_str,"[\"");
     if (interval->status == T_INTERVAL_INVAL)
-	(void) strcat(i_str,INVALID_INTERVAL_STR);
+	strcat(i_str,INVALID_INTERVAL_STR);
     else {
 	p = nabstimeout(interval->data[0]);
-	(void) strcat(i_str,p);
+	strcat(i_str,p);
 	pfree(p);
-	(void) strcat(i_str,"\" \"");
+	strcat(i_str,"\" \"");
 	p = nabstimeout(interval->data[1]);
-	(void) strcat(i_str,p);
+	strcat(i_str,p);
 	pfree(p);
     }
-    (void) strcat(i_str,"\"]\0");
+    strcat(i_str,"\"]\0");
     return(i_str);
 }
 
@@ -963,7 +963,7 @@ timeofday(void)
     int len = 0;
 
     gettimeofday(&tp, &tpz);
-    (void) strftime(templ, sizeof(templ), "%a %b %d %H:%M:%S.%%d %Y %Z",
+    strftime(templ, sizeof(templ), "%a %b %d %H:%M:%S.%%d %Y %Z",
 		    localtime((time_t *) &tp.tv_sec));
     sprintf(buf, templ, tp.tv_usec);
 
diff --git a/src/backend/utils/adt/filename.c b/src/backend/utils/adt/filename.c
index 4d43b2d1abb89ab00749ec62b6d883ba18209efb..a14b8283b598146bd5a005b8b6507ecce0761b70 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.7 1997/07/24 20:16:11 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/filename.c,v 1.8 1997/08/12 20:15:58 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -63,8 +63,7 @@ filename_in(char *file)
 		len = strlen(name);
 	    } else {
 		len = (p - file) - 1;
-		strncpy(name, file+1, len);
-		name[len] = '\0';
+		strNcpy(name, file+1, len);
 	    }
 	    /*printf("name: %s\n");*/
 	    if ((pw = getpwnam(name)) == NULL) {
@@ -84,8 +83,7 @@ filename_in(char *file)
 	    len = strlen(environment);
 	} else {
 	    len = (p - file) - 1;
-	    strncpy(environment, file+1, len);
-	    environment[len] = '\0';
+	    strNcpy(environment, file+1, len);
 	}
 	envirp = getenv(environment);
 	if (envirp) {
diff --git a/src/backend/utils/adt/like.c b/src/backend/utils/adt/like.c
index 2e279317b9575e7aeda0180fdb3e325b6d50ffe3..b92bb814fbbc74534d26fb408ce485461076ea3f 100644
--- a/src/backend/utils/adt/like.c
+++ b/src/backend/utils/adt/like.c
@@ -45,8 +45,7 @@ fixedlen_like(char *s, struct varlena* p, int charlen)
     
     /* be sure sterm is null-terminated */
     sterm = (char *) palloc(charlen + 1);
-    memset(sterm, 0, charlen + 1);
-    strncpy(sterm, s, charlen);
+    strNcpy(sterm, s, charlen);
     
     /* p is a text = varlena, not a string so we have to make 
      * a string from the vl_data field of the struct. */
@@ -140,7 +139,7 @@ bool textnlike(struct varlena *s, struct varlena *p)
 }
 
 
-/*  $Revision: 1.4 $
+/*  $Revision: 1.5 $
 **  "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/nabstime.c b/src/backend/utils/adt/nabstime.c
index 88cf2147a28e4925fa82189e9df0675807d4a11e..52e3113041e86a8417be9a75e881a805a7a1f78e 100644
--- a/src/backend/utils/adt/nabstime.c
+++ b/src/backend/utils/adt/nabstime.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/utils/adt/nabstime.c,v 1.28 1997/07/08 22:06:46 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/utils/adt/nabstime.c,v 1.29 1997/08/12 20:16:00 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -286,11 +286,11 @@ nabstimeout(AbsoluteTime time)
     char zone[MAXDATELEN+1], *tzn = zone;
 
     switch (time) {
-    case EPOCH_ABSTIME:	  (void) strcpy(buf, EPOCH);	break;
-    case INVALID_ABSTIME: (void) strcpy(buf, INVALID);	break;
-    case CURRENT_ABSTIME: (void) strcpy(buf, DCURRENT);	break;
-    case NOEND_ABSTIME:   (void) strcpy(buf, LATE);	break;
-    case NOSTART_ABSTIME: (void) strcpy(buf, EARLY);	break;
+    case EPOCH_ABSTIME:	  strcpy(buf, EPOCH);	break;
+    case INVALID_ABSTIME: strcpy(buf, INVALID);	break;
+    case CURRENT_ABSTIME: strcpy(buf, DCURRENT);	break;
+    case NOEND_ABSTIME:   strcpy(buf, LATE);	break;
+    case NOSTART_ABSTIME: strcpy(buf, EARLY);	break;
     default:
 	abstime2tm( time, &tz, tm, tzn);
 #if DATEDEBUG
diff --git a/src/backend/utils/adt/name.c b/src/backend/utils/adt/name.c
index 8af3f3d782d937d313d02a2d070b274ff7e725b9..43e4c53e84112b268a518bd7c33c6d0502cb9949 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.3 1997/08/03 02:36:57 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/utils/adt/name.c,v 1.4 1997/08/12 20:16:01 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -39,8 +39,7 @@ NameData *namein(char *s)
 	return(NULL);
     result = (NameData*) palloc(NAMEDATALEN);
     /* always keep it null-padded */
-    (void) strncpy(result->data, s, NAMEDATALEN);
-    result->data[NAMEDATALEN-1] = '\0';
+    strNcpy(result->data, s, NAMEDATALEN-1);
     return(result);
 }
 
@@ -126,7 +125,7 @@ int namecpy(Name n1, Name n2)
 {
     if (!n1 || !n2)
 	return(-1);
-    (void) strncpy(n1->data, n2->data, NAMEDATALEN);
+    strncpy(n1->data, n2->data, NAMEDATALEN);
     return(0);
 }
 
@@ -145,8 +144,7 @@ namestrcpy(Name name, char *str)
 {
     if (!name || !str)
 	return(-1);
-    (void) strncpy(name->data, str, NAMEDATALEN);
-    name->data[NAMEDATALEN-1] = '\0';
+    strNcpy(name->data, str, NAMEDATALEN-1);
     return(0);
 }
 
diff --git a/src/backend/utils/adt/numutils.c b/src/backend/utils/adt/numutils.c
index 3521280f4997c63b649904c07495ead2036568e3..77867d50dc0676f1cf28d41201e014503c3be49f 100644
--- a/src/backend/utils/adt/numutils.c
+++ b/src/backend/utils/adt/numutils.c
@@ -10,7 +10,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/utils/adt/numutils.c,v 1.10 1997/04/22 17:47:14 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/utils/adt/numutils.c,v 1.11 1997/08/12 20:16:02 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -149,7 +149,7 @@ ftoa(double value, char *ascii, int width, int prec1, char format)
 		ascii[width] = 0;
 		return(0);
 	}
-	(void) strcpy(ascii, out);
+	strcpy(ascii, out);
 	return(ret);
 #else
     auto int	expon;
diff --git a/src/backend/utils/adt/oidname.c b/src/backend/utils/adt/oidname.c
index 010ed8a79a283ad2e87978a01a99bea710dc2a00..425fa78f65cee147fdb1771bc98510775cebcb29 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.3 1997/08/03 02:37:08 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/oidname.c,v 1.4 1997/08/12 20:16:03 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -35,8 +35,8 @@ oidnamein(char *inStr)
     if (*inptr) {
 	oc->id = (Oid) pg_atoi(inStr, sizeof(Oid), ',');
 	/* copy one less to ensure null-padding */
-	strncpy(oc->name.data,++inptr,NAMEDATALEN);
-	/* namestrcpy(&oc->name, ++inptr); */
+	++inptr;
+	strNcpy(oc->name.data,inptr,NAMEDATALEN-1);
     }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 11b85fd9f3e8479f4f8e8138d604c6587239c46b..e791a1d7b172db0bfc3b9e4f9ec92bf797c47a0d 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.5 1996/11/10 01:20:44 bryanh Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/utils/adt/regexp.c,v 1.6 1997/08/12 20:16:04 momjian Exp $
  *
  *      Alistair Crooks added the code for the regex caching
  *	agc - cached the regular expressions used - there's a good chance
@@ -166,8 +166,7 @@ fixedlen_regexeq(char *s, struct varlena* p, int charlen, int cflags)
     
     /* be sure sterm is null-terminated */
     sterm = (char *) palloc(charlen + 1);
-    memset(sterm, 0, charlen + 1);
-    strncpy(sterm, s, charlen);
+    strNcpy(sterm, s, charlen);
     
     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 d0e3e37766542cf2b21e2bd9cc6752c1155dc0f8..04442cb42dfd31153c814ed71219f4b428475720 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.4 1997/04/27 19:20:16 thomas Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.5 1997/08/12 20:16:05 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -122,14 +122,14 @@ char *regprocout(RegProcedure proid)
 	s = (char *) heap_getattr(proctup, InvalidBuffer, 1,
 				  RelationGetTupleDescriptor(proc), &isnull);
 	if (!isnull) {
-	    strncpy(result, s, 16);
+	    strNcpy(result, s, 16);
 	    break;
 	}
 	elog(FATAL, "regprocout: null procedure %d", proid);
 	/*FALLTHROUGH*/
     case 0:
-	memset(result, 0, 16);
 	result[0] = '-';
+	result[1] = '\0';
 #ifdef	EBUG
 	elog(DEBUG, "regprocout: no such procedure %d", proid);
 #endif	/* defined(EBUG) */
diff --git a/src/backend/utils/adt/varchar.c b/src/backend/utils/adt/varchar.c
index f1fca452514a59723198eca7c385b444840aa865..538063c62251c67daf261099170054eacb3f1b64 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.7 1997/03/14 23:21:01 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/utils/adt/varchar.c,v 1.8 1997/08/12 20:16:07 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -98,8 +98,7 @@ bpcharout(char *s)
     } else {
 	len = *(int32*)s - 4;
 	result = (char *) palloc(len+1);
-	strncpy(result, s+4, len);	/* these are blank-padded */
-	result[len] = '\0';
+	strNcpy(result, s+4, len);	/* these are blank-padded */
     }
     return(result);
 }
@@ -136,8 +135,7 @@ varcharin(char *s, int dummy, int typlen)
     
     result = (char *) palloc(typlen);
     *(int32*)result = typlen;
-    memset(result+4, 0, len);
-    (void) strncpy(result+4, s, len);
+    strncpy(result+4, s, len);
 
     return(result);
 }
@@ -155,8 +153,7 @@ varcharout(char *s)
     } else {
 	len = *(int32*)s - 4;
 	result = (char *) palloc(len+1);
-	memset(result, 0, len+1);
-	strncpy(result, s+4, len);
+	strNcpy(result, s+4, len);
     }
     return(result);
 }
diff --git a/src/backend/utils/fmgr/dfmgr.c b/src/backend/utils/fmgr/dfmgr.c
index df34b389593b096165514a88c390deb959ebad2f..5b97786cbfffc8bf46aabb935f42bd68e2787651 100644
--- a/src/backend/utils/fmgr/dfmgr.c
+++ b/src/backend/utils/fmgr/dfmgr.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/utils/fmgr/dfmgr.c,v 1.7 1997/07/24 20:16:59 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/utils/fmgr/dfmgr.c,v 1.8 1997/08/12 20:16:09 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -152,7 +152,7 @@ handle_load(char *filename, char *funcname)
              * Same files - different paths (ie, symlink or link)
              */
             if (file_scanner != (DynamicFileList *) NULL)
-		(void) strcpy(file_scanner->filename, filename);
+		strcpy(file_scanner->filename, filename);
 	    
         }
     } else {
@@ -175,7 +175,7 @@ handle_load(char *filename, char *funcname)
         }
 	memset((char *) file_scanner, 0, sizeof(DynamicFileList));
 	
-        (void) strcpy(file_scanner->filename, filename);
+        strcpy(file_scanner->filename, filename);
         file_scanner->device = stat_buf.st_dev;
         file_scanner->inode = stat_buf.st_ino;
         file_scanner->next = (DynamicFileList *) NULL;
diff --git a/src/backend/utils/init/findbe.c b/src/backend/utils/init/findbe.c
index b44d58e9f8e743510e401a8591477a70b4888b02..4043baa2888e604716007d5426a7933005d6d37f 100644
--- a/src/backend/utils/init/findbe.c
+++ b/src/backend/utils/init/findbe.c
@@ -6,7 +6,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/utils/init/Attic/findbe.c,v 1.3 1997/02/14 04:18:08 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/utils/init/Attic/findbe.c,v 1.4 1997/08/12 20:16:12 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -167,12 +167,12 @@ FindBackend(char *backend, char *argv0)
 	if (*argv0 == '/' || !getcwd(buf, MAXPGPATH))
 	    buf[0] = '\0';
 	else
-	    (void) strcat(buf, "/");
-	(void) strcat(buf, argv0);
+	    strcat(buf, "/");
+	strcat(buf, argv0);
 	p = strrchr(buf, '/');
-	(void) strcpy(++p, "postgres");
+	strcpy(++p, "postgres");
 	if (!ValidateBackend(buf)) {
-	    (void) strncpy(backend, buf, MAXPGPATH);
+	    strncpy(backend, buf, MAXPGPATH);
 	    if (DebugLvl)
 		fprintf(stderr, "FindBackend: found \"%s\" using argv[0]\n",
 			backend);
@@ -192,7 +192,7 @@ FindBackend(char *backend, char *argv0)
 	    fprintf(stderr, "FindBackend: searching PATH ...\n");
 	pathlen = strlen(p);
 	path = malloc(pathlen + 1);
-	(void) strcpy(path, p);
+	strcpy(path, p);
 	for (startp = path, endp = strchr(path, ':');
 	     startp && *startp;
 	     startp = endp + 1, endp = strchr(startp, ':')) {
@@ -202,11 +202,11 @@ FindBackend(char *backend, char *argv0)
 		*endp = '\0';
 	    if (*startp == '/' || !getcwd(buf, MAXPGPATH))
 		buf[0] = '\0';
-	    (void) strcat(buf, startp);
-	    (void) strcat(buf, "/postgres");
+	    strcat(buf, startp);
+	    strcat(buf, "/postgres");
 	    switch (ValidateBackend(buf)) {
 	    case 0:		/* found ok */
-		(void) strncpy(backend, buf, MAXPGPATH);
+		strncpy(backend, buf, MAXPGPATH);
 		if (DebugLvl)
 		    fprintf(stderr, "FindBackend: found \"%s\" using PATH\n",
 			    backend);
diff --git a/src/backend/utils/sort/psort.c b/src/backend/utils/sort/psort.c
index 8eddc5bbc6286f0fff510dfc5144286515bc4a2e..dbda8abd1ff37f8055b790eb188b62be650cfd00 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.11 1997/08/06 17:11:20 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/utils/sort/Attic/psort.c,v 1.12 1997/08/12 20:16:14 momjian Exp $
  *
  * NOTES
  *      Sorts the first relation into the second relation.
@@ -214,17 +214,17 @@ resetpsort()
  */
 
 
-#define	PUTTUP(NODE, TUP, FP) if (1) {\
+#define	PUTTUP(NODE, TUP, FP) do {\
     ((Psortstate *)NODE->psortstate)->BytesWritten += (TUP)->t_len; \
-    fwrite((char *)TUP, (TUP)->t_len, 1, FP);} else
+    fwrite((char *)TUP, (TUP)->t_len, 1, FP);} while (0)
 #define	ENDRUN(FP)	fwrite((char *)&shortzero, sizeof (shortzero), 1, FP)
 #define	GETLEN(LEN, FP)	fread((char *)&(LEN), sizeof (shortzero), 1, FP)
 #define	ALLOCTUP(LEN)	((HeapTuple)palloc((unsigned)LEN))
-#define	GETTUP(NODE, TUP, LEN, FP) if (1) {\
+#define	GETTUP(NODE, TUP, LEN, FP) do {\
     IncrProcessed(); \
     ((Psortstate *)NODE->psortstate)->BytesRead += (LEN) - sizeof (shortzero); \
     fread((char *)(TUP) + sizeof (shortzero), (LEN) - sizeof (shortzero), 1, FP);} \
-				else
+				while (0)
 #define	SETTUPLEN(TUP, LEN)	(TUP)->t_len = LEN
     
     /*
diff --git a/src/include/c.h b/src/include/c.h
index e02f5f9fd561c26b2bddc769be8b5b28bbb5a2fa..eaf1ee7b03a940ae00a450972a115c1a0757ce6b 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.13 1997/05/17 16:25:57 mergl Exp $
+ * $Id: c.h,v 1.14 1997/08/12 20:16:17 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 macros
+ *	8)	Min, Max, Abs, strNcpy macros
  *	9)	externs
  *      10)      Berkeley-specific defs
  *	11)	system-specific hacks
@@ -681,6 +681,14 @@ typedef struct Exception {
  */
 #define Abs(x)		((x) >= 0 ? (x) : -(x))
 
+/*
+ * 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(dest,src,len)	do \
+		{strncpy((dest),(src),(len));*((dest) + (len)) = '\0';} while (0)
+
 /* ----------------------------------------------------------------
  *		Section 9: externs
  * ----------------------------------------------------------------
diff --git a/src/interfaces/libpq/fe-auth.c b/src/interfaces/libpq/fe-auth.c
index 66c2acf9ecc457f233d35ccad713a13b6da3ebca..d058ec8ab789a2e19f6bb774bb8c28a714cc41e4 100644
--- a/src/interfaces/libpq/fe-auth.c
+++ b/src/interfaces/libpq/fe-auth.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-auth.c,v 1.7 1997/03/12 21:23:02 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-auth.c,v 1.8 1997/08/12 20:16:21 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -273,10 +273,10 @@ krb5_ccache pg_krb5_init(void)
 		       "pg_krb5_init: krb5_cc_default_name failed\n");
 	return((krb5_ccache) NULL);
     }
-    (void) strcpy(tktbuf, defname);
+    strcpy(tktbuf, defname);
     if (realm = getenv("PGREALM")) {
-	(void) strcat(tktbuf, "@");
-	(void) strcat(tktbuf, realm);
+	strcat(tktbuf, "@");
+	strcat(tktbuf, realm);
     }
     
     if (code = krb5_cc_resolve(tktbuf, &ccache)) {
@@ -374,19 +374,19 @@ pg_krb5_sendauth(const char* PQerrormsg,int sock,
     /*
      * set up server -- canonicalize as described above
      */
-    (void) strcpy(servbuf, PG_KRB_SRVNAM);
+    strcpy(servbuf, PG_KRB_SRVNAM);
     *(hostp = servbuf + (sizeof(PG_KRB_SRVNAM) - 1)) = '/';
     if (hostname || *hostname) {
-	(void) strncpy(++hostp, hostname, MAXHOSTNAMELEN);
+	strncpy(++hostp, hostname, MAXHOSTNAMELEN);
     } else {
 	if (gethostname(++hostp, MAXHOSTNAMELEN) < 0)
-	    (void) strcpy(hostp, "localhost");
+	    strcpy(hostp, "localhost");
     }
     if (hostp = strchr(hostp, '.'))
 	*hostp = '\0';
     if (realm = getenv("PGREALM")) {
-	(void) strcat(servbuf, "@");
-	(void) strcat(servbuf, realm);
+	strcat(servbuf, "@");
+	strcat(servbuf, realm);
     }
     if (code = krb5_parse_name(servbuf, &server)) {
 	(void) sprintf(PQerrormsg,
@@ -565,7 +565,7 @@ fe_getauthname(char* PQerrormsg)
     }
 
     if(name && (authn = (char *) malloc(strlen(name) + 1)))
-      (void) strcpy(authn, name);
+      strcpy(authn, name);
     return(authn);
 }
 
diff --git a/src/tutorial/C-code/funcs.c b/src/tutorial/C-code/funcs.c
index a721b2bbfdf5e873a2537ab8e7e25ed553312df0..10e541a2249fc772634d51add2ea0ebf0fe920a8 100644
--- a/src/tutorial/C-code/funcs.c
+++ b/src/tutorial/C-code/funcs.c
@@ -37,7 +37,7 @@ concat16(char16 *arg1, char16 *arg2)
     char16 *new_c16 = (char16 *) palloc(sizeof(char16));
 
     memset(new_c16, 0, sizeof(char16));
-    (void) strncpy((char*)new_c16, (char*)arg1, 16);
+    strncpy((char*)new_c16, (char*)arg1, 16);
     return (char16 *)(strncat((char*)new_c16, (char*)arg2, 16));
 }