zsh-workers
 help / color / mirror / code / Atom feed
* PATCH: RLIMIT_RTTIME
@ 2011-06-18 23:56 Peter Stephenson
  2011-06-19  0:18 ` PATCH: unused variables Peter Stephenson
  0 siblings, 1 reply; 3+ messages in thread
From: Peter Stephenson @ 2011-06-18 23:56 UTC (permalink / raw)
  To: Zsh hackers list

We don't handle this limit, new in recent Linux kernels.  It's in
microseconds, so I've added a type to distinguish from pure numbers.

For some reason we couldn't be bothered to output the full range of pure
numeric resources but cast them to integers.  Probably just laziness.
I've fixed it.

gcc 4.6.0 is producing a range of "value set but not used" warnings that
will want looking at.

Index: Src/Builtins/rlimits.awk
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/Builtins/rlimits.awk,v
retrieving revision 1.8
diff -p -u -r1.8 rlimits.awk
--- Src/Builtins/rlimits.awk	17 Mar 2006 23:35:04 -0000	1.8
+++ Src/Builtins/rlimits.awk	18 Jun 2011 23:52:38 -0000
@@ -53,6 +53,7 @@ BEGIN {limidx = 0}
 	    if (limnam == "MSGQUEUE") { msg[limnum] = "Nmsgqueue" }
 	    if (limnam == "NICE") { msg[limnum] = "Nnice" }
 	    if (limnam == "RTPRIO") { msg[limnum] = "Nrt_priority" }
+	    if (limnam == "RTTIME") { msg[limnum] = "Urt_time" }
         }
     }
 }
@@ -99,6 +100,7 @@ END {
 	    if(limtype == "M") { limtype = "MEMORY" }
 	    if(limtype == "N") { limtype = "NUMBER" }
 	    if(limtype == "T") { limtype = "TIME" }
+	    if(limtype == "U") { limtype = "MICROSECONDS" }
 	}
 	printf("\tZLIMTYPE_%s,\n", limtype)
     }
Index: Src/Builtins/rlimits.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/Builtins/rlimits.c,v
retrieving revision 1.23
diff -p -u -r1.23 rlimits.c
--- Src/Builtins/rlimits.c	13 May 2011 18:12:06 -0000	1.23
+++ Src/Builtins/rlimits.c	18 Jun 2011 23:52:38 -0000
@@ -36,6 +36,7 @@ enum {
     ZLIMTYPE_MEMORY,
     ZLIMTYPE_NUMBER,
     ZLIMTYPE_TIME,
+    ZLIMTYPE_MICROSECONDS,
     ZLIMTYPE_UNKNOWN
 };
 
@@ -113,10 +114,37 @@ showlimitvalue(int lim, rlim_t val)
 	   seconds. */
 	printf("%d:%02d:%02d\n", (int)(val / 3600),
 	       (int)(val / 60) % 60, (int)(val % 60));
+    } else if (limtype[lim] == ZLIMTYPE_MICROSECONDS) {
+	/* microseconds */
+# ifdef RLIM_T_IS_QUAD_T
+	printf("%qdus\n", val);
+# else
+#  ifdef RLIM_T_IS_LONG_LONG
+	printf("%lldus\n", val);
+#  else
+#   ifdef RLIM_T_IS_UNSIGNED
+	printf("%luus\n", val);
+#   else
+	printf("%ldus\n", val);
+#   endif /* RLIM_T_IS_UNSIGNED */
+#  endif /* RLIM_T_IS_LONG_LONG */
+# endif /* RLIM_T_IS_QUAD_T */
     } else if (limtype[lim] == ZLIMTYPE_NUMBER ||
 	       limtype[lim] == ZLIMTYPE_UNKNOWN) {
 	/* pure numeric resource */
-	printf("%d\n", (int)val);
+# ifdef RLIM_T_IS_QUAD_T
+	printf("%qd\n", val);
+# else
+#  ifdef RLIM_T_IS_LONG_LONG
+	printf("%lld\n", val);
+#  else
+#   ifdef RLIM_T_IS_UNSIGNED
+	printf("%lu\n", val);
+#   else
+	printf("%ld\n", val);
+#   endif /* RLIM_T_IS_UNSIGNED */
+#  endif /* RLIM_T_IS_LONG_LONG */
+# endif /* RLIM_T_IS_QUAD_T */
     } else if (val >= 1024L * 1024L)
 	/* memory resource -- display with `K' or `M' modifier */
 # ifdef RLIM_T_IS_QUAD_T
@@ -125,7 +153,7 @@ showlimitvalue(int lim, rlim_t val)
 	printf("%qdkB\n", val / 1024L);
 # else
 #  ifdef RLIM_T_IS_LONG_LONG
-    printf("%lldMB\n", val / (1024L * 1024L));
+	printf("%lldMB\n", val / (1024L * 1024L));
     else
 	printf("%lldkB\n", val / 1024L);
 #  else
@@ -539,7 +567,9 @@ bin_limit(char *nam, char **argv, Option
 		    return 1;
 		}
 	    }
-	} else if (limtype[lim] == ZLIMTYPE_NUMBER || limtype[lim] == ZLIMTYPE_UNKNOWN) {
+	} else if (limtype[lim] == ZLIMTYPE_NUMBER ||
+		   limtype[lim] == ZLIMTYPE_UNKNOWN ||
+		   limtype[lim] == ZLIMTYPE_MICROSECONDS) {
 	    /* pure numeric resource -- only a straight decimal number is
 	    permitted. */
 	    char *t = s;
Index: Src/Builtins/rlimits.mdd
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/Builtins/rlimits.mdd,v
retrieving revision 1.5
diff -p -u -r1.5 rlimits.mdd
--- Src/Builtins/rlimits.mdd	3 Feb 2010 18:37:07 -0000	1.5
+++ Src/Builtins/rlimits.mdd	18 Jun 2011 23:52:38 -0000
@@ -14,7 +14,7 @@ rlimits.o rlimits..o: rlimits.h
 rlimits.h: rlimits.awk @RLIMITS_INC_H@
 	$(AWK) -f $(sdir)/rlimits.awk @RLIMITS_INC_H@ /dev/null > rlimits.h
 	@if grep ZLIMTYPE_UNKNOWN rlimits.h >/dev/null; then \
-	    echo >&2 WARNING: unknown limits: mail rlimits.h to developers; \
+	    echo >&2 WARNING: unknown limits: mail Src/Builtins/rlimits.h to developers; \
 	else :; fi
 
 clean-here: clean.rlimits

-- 
Peter Stephenson <p.w.stephenson@ntlworld.com>
Web page now at http://homepage.ntlworld.com/p.w.stephenson/


^ permalink raw reply	[flat|nested] 3+ messages in thread

* PATCH: unused variables
  2011-06-18 23:56 PATCH: RLIMIT_RTTIME Peter Stephenson
@ 2011-06-19  0:18 ` Peter Stephenson
  2011-06-19 19:05   ` Mikael Magnusson
  0 siblings, 1 reply; 3+ messages in thread
From: Peter Stephenson @ 2011-06-19  0:18 UTC (permalink / raw)
  To: Zsh hackers list

On Sun, 19 Jun 2011 00:56:43 +0100
Peter Stephenson <p.w.stephenson@ntlworld.com> wrote:
> gcc 4.6.0 is producing a range of "value set but not used" warnings that
> will want looking at.

All these seem to be trivially pukka: they are local or static variables
we are never referring to apart from the points where I've made the
changes.  One case needed some conditional compilation, the rest just
stripping out.

It's probably too late to be able to tell if any of these actually
should be being referred to later.

Watch carefully in case I've removed the right hand side of an
assignment with side effects, but I think I've checked for that...
In such cases I've used a cast to void in case we ever want to run
lint.  Joke.

Index: Src/glob.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/glob.c,v
retrieving revision 1.76
diff -p -u -r1.76 glob.c
--- Src/glob.c	9 May 2011 09:49:09 -0000	1.76
+++ Src/glob.c	19 Jun 2011 00:14:15 -0000
@@ -1801,7 +1801,7 @@ zglob(LinkList list, LinkNode np, int no
 		    Eprog prog;
 
 		    if ((prog = parse_string(sortp->exec, 0))) {
-			int ef = errflag, lv = lastval, ret;
+			int ef = errflag, lv = lastval;
 
 			/* Parsed OK, execute for each name */
 			for (tmpptr = matchbuf; tmpptr < matchptr; tmpptr++) {
@@ -1814,7 +1814,6 @@ zglob(LinkList list, LinkNode np, int no
 				tmpptr->sortstrs[iexec] = tmpptr->name;
 			}
 
-			ret = lastval;
 			errflag = ef;
 			lastval = lv;
 		    } else {
Index: Src/lex.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/lex.c,v
retrieving revision 1.66
diff -p -u -r1.66 lex.c
--- Src/lex.c	19 May 2011 16:10:48 -0000	1.66
+++ Src/lex.c	19 Jun 2011 00:14:15 -0000
@@ -1698,7 +1698,7 @@ parse_subscript(char *s, int sub, int en
 mod_export int
 parse_subst_string(char *s)
 {
-    int c, l = strlen(s), err, olen, lexstop_ret;
+    int c, l = strlen(s), err;
     char *ptr;
 
     if (!*s || !strcmp(s, nulstring))
@@ -1711,13 +1711,11 @@ parse_subst_string(char *s)
     bptr = tokstr = s;
     bsiz = l + 1;
     c = hgetc();
-    lexstop_ret = lexstop;
     c = gettokstr(c, 1);
     err = errflag;
     strinend();
     inpop();
     DPUTS(cmdsp, "BUG: parse_subst_string: cmdstack not empty.");
-    olen = len;
     lexrestore();
     errflag = err;
     if (c == LEXERR) {
@@ -1726,8 +1724,9 @@ parse_subst_string(char *s)
     }
 #ifdef DEBUG
     /*
-     * Historical note: we used to check here for olen == l, but
-     * that's not necessarily the case if we stripped an RCQUOTE.
+     * Historical note: we used to check here for olen (the value of len
+     * before lexrestore()) == l, but that's not necessarily the case if
+     * we stripped an RCQUOTE.
      */
     if (c != STRING || (errflag && !noerrs)) {
 	fprintf(stderr, "Oops. Bug in parse_subst_string: %s\n",
Index: Src/math.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/math.c,v
retrieving revision 1.40
diff -p -u -r1.40 math.c
--- Src/math.c	27 May 2011 01:42:30 -0000	1.40
+++ Src/math.c	19 Jun 2011 00:14:15 -0000
@@ -969,7 +969,6 @@ void
 op(int what)
 {
     mnumber a, b, c, *spval;
-    char *lv;
     int tp = type[what];
 
     if (errflag)
@@ -1155,7 +1154,6 @@ op(int what)
 	}
 	if (tp & (OP_E2|OP_E2IO)) {
 	    struct mathvalue *mvp = stack + sp + 1;
-	    lv = stack[sp+1].lval;
 	    c = setmathvar(mvp, c);
 	    push(c, mvp->lval, 0);
 	} else
Index: Src/params.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/params.c,v
retrieving revision 1.172
diff -p -u -r1.172 params.c
--- Src/params.c	19 May 2011 16:10:48 -0000	1.172
+++ Src/params.c	19 Jun 2011 00:14:15 -0000
@@ -655,7 +655,10 @@ createparamtable(void)
     char **new_environ;
     int  envsize;
 #endif
-    char **envp, **envp2, **sigptr, **t;
+#ifndef USE_SET_UNSET_ENV
+    char **envp;
+#endif
+    char **envp2, **sigptr, **t;
     char buf[50], *str, *iname, *ivalue, *hostnam;
     int  oae = opts[ALLEXPORT];
 #ifdef HAVE_UNAME
@@ -721,7 +724,11 @@ createparamtable(void)
     /* Now incorporate environment variables we are inheriting *
      * into the parameter hash table. Copy them into dynamic   *
      * memory so that we can free them if needed               */
-    for (envp = envp2 = environ; *envp2; envp2++) {
+    for (
+#ifndef USE_SET_UNSET_ENV
+	envp = 
+#endif
+	    envp2 = environ; *envp2; envp2++) {
 	if (split_env_string(*envp2, &iname, &ivalue)) {
 	    if (!idigit(*iname) && isident(iname) && !strchr(iname, '[')) {
 		if ((!(pm = (Param) paramtab->getnode(paramtab, iname)) ||
@@ -993,9 +1000,7 @@ mod_export int
 isident(char *s)
 {
     char *ss;
-    int ne;
 
-    ne = noeval;		/* save the current value of noeval     */
     if (!*s)			/* empty string is definitely not valid */
 	return 0;
 
Index: Src/parse.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/parse.c,v
retrieving revision 1.86
diff -p -u -r1.86 parse.c
--- Src/parse.c	20 Dec 2010 10:28:43 -0000	1.86
+++ Src/parse.c	19 Jun 2011 00:14:16 -0000
@@ -1709,11 +1709,11 @@ par_simple(int *complex, int nr)
 		}
 		zshlex();
 	    } else {
-		int ll, sl, pl, c = 0;
+		int ll, sl, c = 0;
 
 		ll = ecadd(0);
 		sl = ecadd(0);
-		pl = ecadd(WCB_PIPE(WC_PIPE_END, 0));
+		(void)ecadd(WCB_PIPE(WC_PIPE_END, 0));
 
 		if (!par_cmd(&c)) {
 		    cmdpop();
Index: Src/utils.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/utils.c,v
retrieving revision 1.258
diff -p -u -r1.258 utils.c
--- Src/utils.c	9 May 2011 09:49:09 -0000	1.258
+++ Src/utils.c	19 Jun 2011 00:14:16 -0000
@@ -4689,7 +4689,7 @@ addunprintable(char *v, const char *u, c
 mod_export char *
 quotestring(const char *s, char **e, int instring)
 {
-    const char *u, *tt;
+    const char *u;
     char *v;
     int alloclen;
     char *buf;
@@ -4740,7 +4740,7 @@ quotestring(const char *s, char **e, int
 	break;
     }
 
-    tt = quotestart = v = buf = zshcalloc(alloclen);
+    quotestart = v = buf = zshcalloc(alloclen);
 
     DPUTS(instring < QT_BACKSLASH || instring == QT_BACKTICK ||
 	  instring > QT_SINGLE_OPTIONAL,
Index: Src/Modules/db_gdbm.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/Modules/db_gdbm.c,v
retrieving revision 1.6
diff -p -u -r1.6 db_gdbm.c
--- Src/Modules/db_gdbm.c	30 Sep 2008 08:59:18 -0000	1.6
+++ Src/Modules/db_gdbm.c	19 Jun 2011 00:14:16 -0000
@@ -39,7 +39,9 @@
 
 #include <gdbm.h>
 
+#if 0 /* what is this for? */
 static char *backtype = "db/gdbm";
+#endif
 
 static const struct gsu_scalar gdbm_gsu =
 { gdbmgetfn, gdbmsetfn, gdbmunsetfn };
@@ -138,7 +140,6 @@ static void
 gdbmsetfn(Param pm, char *val)
 {
     datum key, content;
-    int ret;
     GDBM_FILE dbf;
 
     key.dptr = pm->node.nam;
@@ -147,7 +148,7 @@ gdbmsetfn(Param pm, char *val)
     content.dsize = strlen(content.dptr) + 1;
 
     dbf = (GDBM_FILE)(pm->u.hash->tmpdata);
-    ret = gdbm_store(dbf, key, content, GDBM_REPLACE);
+    (void)gdbm_store(dbf, key, content, GDBM_REPLACE);
 }
 
 /**/
@@ -155,14 +156,13 @@ static void
 gdbmunsetfn(Param pm, int um)
 {
     datum key;
-    int ret;
     GDBM_FILE dbf;
 
     key.dptr = pm->node.nam;
     key.dsize = strlen(key.dptr) + 1;
 
     dbf = (GDBM_FILE)(pm->u.hash->tmpdata);
-    ret = gdbm_delete(dbf, key);
+    (void)gdbm_delete(dbf, key);
 }
 
 /**/
@@ -171,12 +171,10 @@ getgdbmnode(HashTable ht, const char *na
 {
     int len;
     char *nameu;
-    datum key;
     Param pm = NULL;
 
     nameu = dupstring(name);
     unmetafy(nameu, &len);
-    key.dptr = nameu;
 
     pm = (Param) hcalloc(sizeof(struct param));
     pm->node.nam = nameu;
Index: Src/Zle/compcore.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/Zle/compcore.c,v
retrieving revision 1.109
diff -p -u -r1.109 compcore.c
--- Src/Zle/compcore.c	4 Jun 2011 21:32:06 -0000	1.109
+++ Src/Zle/compcore.c	19 Jun 2011 00:14:16 -0000
@@ -1477,7 +1477,7 @@ set_comp_sep(void)
      *      when stripping single quotes: 1 for RCQUOTES, 3 otherwise
      *      (because we leave a "'" in the final string).
      */
-    int dq = 0, odq, sq = 0, osq, qttype, sqq = 0, lsq = 0, qa = 0;
+    int dq = 0, odq, sq = 0, qttype, sqq = 0, lsq = 0, qa = 0;
     /* dolq: like sq and dq but for dollars quoting. */
     int dolq = 0;
     /* remember some global variable values (except lp is local) */
@@ -1582,7 +1582,6 @@ set_comp_sep(void)
 
     }
     odq = dq;
-    osq = sq;
     inpush(dupstrspace(tmp), 0, NULL);
     zlemetaline = tmp;
     /*
@@ -3306,7 +3305,7 @@ dupmatch(Cmatch m, int nbeg, int nend)
 mod_export int
 permmatches(int last)
 {
-    Cmgroup g = amatches, n, opm;
+    Cmgroup g = amatches, n;
     Cmatch *p, *q;
     Cexpl *ep, *eq, e, o;
     LinkList mlist;
@@ -3320,7 +3319,6 @@ permmatches(int last)
     }
     newmatches = fi = 0;
 
-    opm = pmatches;
     pmatches = lmatches = NULL;
     nmatches = smatches = diffmatches = 0;
 
Index: Src/Zle/complist.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/Zle/complist.c,v
retrieving revision 1.126
diff -p -u -r1.126 complist.c
--- Src/Zle/complist.c	14 May 2011 00:07:42 -0000	1.126
+++ Src/Zle/complist.c	19 Jun 2011 00:14:16 -0000
@@ -1369,8 +1369,6 @@ compprintlist(int showall)
 	}
 #endif
 	if ((e = g->expls)) {
-	    int l;
-
 	    if (!lastused && lasttype == 1) {
 		e = lastexpl;
 		ml = lastml;
@@ -1393,9 +1391,9 @@ compprintlist(int showall)
 		    }
 		    if (mlbeg < 0 && mfirstl < 0)
 			mfirstl = ml;
-		    l = compprintfmt((*e)->str,
-                                     ((*e)->always ? -1 : (*e)->count),
-                                     dolist(ml), 1, ml, &stop);
+		    (void)compprintfmt((*e)->str,
+				       ((*e)->always ? -1 : (*e)->count),
+				       dolist(ml), 1, ml, &stop);
 		    if (mselect >= 0) {
 			int mm = (mcols * ml), i;
 
Index: Src/Zle/zle_refresh.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/Zle/zle_refresh.c,v
retrieving revision 1.86
diff -p -u -r1.86 zle_refresh.c
--- Src/Zle/zle_refresh.c	9 May 2011 09:49:09 -0000	1.86
+++ Src/Zle/zle_refresh.c	19 Jun 2011 00:14:17 -0000
@@ -2418,8 +2418,6 @@ singlerefresh(ZLE_STRING_T tmpline, int 
 	all_atr_off = TXT_ATTR_OFF_FROM_ON(all_atr_on);
 
 	if (tmpline[t0] == ZWC('\t')) {
-	    REFRESH_ELEMENT sp = zr_sp;
-	    sp.atr = base_atr_on;
 	    for (*vp++ = zr_sp; (vp - vbuf) & 7; )
 		*vp++ = zr_sp;
 	    vp[-1].atr |= base_atr_off;
Index: Src/Zle/zle_tricky.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/Zle/zle_tricky.c,v
retrieving revision 1.108
diff -p -u -r1.108 zle_tricky.c
--- Src/Zle/zle_tricky.c	9 May 2011 09:49:09 -0000	1.108
+++ Src/Zle/zle_tricky.c	19 Jun 2011 00:14:17 -0000
@@ -529,7 +529,7 @@ parambeg(char *s)
 	 * or $'...').
 	 */
 	char *b = p + 1, *e = b;
-	int n = 0, br = 1, nest = 0;
+	int n = 0, br = 1;
 
 	if (*b == Inbrace) {
 	    char *tb = b;
@@ -543,8 +543,6 @@ parambeg(char *s)
 	    n = skipparens(Inpar, Outpar, &b);
 
 	    for (tb = p - 1; tb > s && *tb != Outbrace && *tb != Inbrace; tb--);
-	    if (tb > s && *tb == Inbrace && (tb[-1] == String || *tb == Qstring))
-		nest = 1;
 	}
 
 	/* Ignore the stuff before the parameter name. */

-- 
Peter Stephenson <p.w.stephenson@ntlworld.com>
Web page now at http://homepage.ntlworld.com/p.w.stephenson/


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: PATCH: unused variables
  2011-06-19  0:18 ` PATCH: unused variables Peter Stephenson
@ 2011-06-19 19:05   ` Mikael Magnusson
  0 siblings, 0 replies; 3+ messages in thread
From: Mikael Magnusson @ 2011-06-19 19:05 UTC (permalink / raw)
  To: Peter Stephenson; +Cc: Zsh hackers list

On 19 June 2011 02:18, Peter Stephenson <p.w.stephenson@ntlworld.com> wrote:
> On Sun, 19 Jun 2011 00:56:43 +0100
> Peter Stephenson <p.w.stephenson@ntlworld.com> wrote:
>> gcc 4.6.0 is producing a range of "value set but not used" warnings that
>> will want looking at.
>
> All these seem to be trivially pukka: they are local or static variables
> we are never referring to apart from the points where I've made the
> changes.  One case needed some conditional compilation, the rest just
> stripping out.
>
> It's probably too late to be able to tell if any of these actually
> should be being referred to later.
>
> Watch carefully in case I've removed the right hand side of an
> assignment with side effects, but I think I've checked for that...
> In such cases I've used a cast to void in case we ever want to run
> lint.  Joke.
>
> Index: Src/Zle/zle_tricky.c
> ===================================================================
> RCS file: /cvsroot/zsh/zsh/Src/Zle/zle_tricky.c,v
> retrieving revision 1.108
> diff -p -u -r1.108 zle_tricky.c
> --- Src/Zle/zle_tricky.c        9 May 2011 09:49:09 -0000       1.108
> +++ Src/Zle/zle_tricky.c        19 Jun 2011 00:14:17 -0000
> @@ -543,8 +543,6 @@ parambeg(char *s)
>            n = skipparens(Inpar, Outpar, &b);
>
>            for (tb = p - 1; tb > s && *tb != Outbrace && *tb != Inbrace; tb--);
> -           if (tb > s && *tb == Inbrace && (tb[-1] == String || *tb == Qstring))
> -               nest = 1;
>        }
>
>        /* Ignore the stuff before the parameter name. */

Looks like we can remove this for loop too, it only changes tb which
goes out of scope with that closing brace.


-- 
Mikael Magnusson


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2011-06-19 19:11 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-06-18 23:56 PATCH: RLIMIT_RTTIME Peter Stephenson
2011-06-19  0:18 ` PATCH: unused variables Peter Stephenson
2011-06-19 19:05   ` Mikael Magnusson

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).