Rocksolid Light

Welcome to novaBBS (click a section below)

mail  files  register  newsreader  groups  login

Message-ID:  

The unfacts, did we have them, are too imprecisely few to warrant our certitude.


devel / comp.lang.c / Extra parentheses in function pointer declaration?

SubjectAuthor
* Extra parentheses in function pointer declaration?Philipp Klaus Krause
+- Re: Extra parentheses in function pointer declaration?Tim Rentsch
+* Re: Extra parentheses in function pointer declaration?Stefan Ram
|`- Re: Extra parentheses in function pointer declaration?Ben Bacarisse
+* Re: Extra parentheses in function pointer declaration?Kaz Kylheku
|`- Re: Extra parentheses in function pointer declaration?Ben Bacarisse
`* Re: Extra parentheses in function pointer declaration?Andrey Tarasevich
 `- Re: Extra parentheses in function pointer declaration?james...@alumni.caltech.edu

1
Extra parentheses in function pointer declaration?

<t11shm$a7qf$1@solani.org>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=20901&group=comp.lang.c#20901

  copy link   Newsgroups: comp.lang.c
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!reader5.news.weretis.net!news.solani.org!.POSTED!not-for-mail
From: pkk...@spth.de (Philipp Klaus Krause)
Newsgroups: comp.lang.c
Subject: Extra parentheses in function pointer declaration?
Date: Fri, 18 Mar 2022 13:05:09 +0100
Message-ID: <t11shm$a7qf$1@solani.org>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Fri, 18 Mar 2022 12:05:10 -0000 (UTC)
Injection-Info: solani.org;
logging-data="335695"; mail-complaints-to="abuse@news.solani.org"
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101
Thunderbird/91.6.2
Cancel-Lock: sha1:RGCvBFPf0z2d4J+5sQYUEQ7wj8M=
Content-Language: en-US
X-User-ID: eJwNykkRwDAMBDBKjvfwBI5z8YfQ6i3Bw7tomXp6XZcZeyl0U8vh6jp9wmBh9Jxw/rOZ0AA/DqUP/w==
 by: Philipp Klaus Krause - Fri, 18 Mar 2022 12:05 UTC

C has multiple ways to write function pointer parameters (name is
optional, functiond ecays to function pointer).

So, according to my understanding, these three are equivalent:

int f9 (int (*)(int), int);
int f9 (int (int), int);
int f9 (int f(int), int i);

However, I have also seen the followign as equivalent (and both GCC and
clang accept it wihout warning), but don't see what allows the extra
parentheses

int f9 (int ((int)), int);

Re: Extra parentheses in function pointer declaration?

<86zgln9x4x.fsf@linuxsc.com>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=20902&group=comp.lang.c#20902

  copy link   Newsgroups: comp.lang.c
Path: i2pn2.org!i2pn.org!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: tr.17...@z991.linuxsc.com (Tim Rentsch)
Newsgroups: comp.lang.c
Subject: Re: Extra parentheses in function pointer declaration?
Date: Fri, 18 Mar 2022 07:02:38 -0700
Organization: A noiseless patient Spider
Lines: 45
Message-ID: <86zgln9x4x.fsf@linuxsc.com>
References: <t11shm$a7qf$1@solani.org>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Injection-Info: reader02.eternal-september.org; posting-host="09e4cccaac3ddc52001f1b7f0698664f";
logging-data="15351"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19TXDx/9MsuUh5yokpar5m9+i7x5eZonVc="
User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux)
Cancel-Lock: sha1:fWKL7GZwgNhyHh/qQVJfNqianaw=
sha1:7ft6/r1Zr+eBEkevtupt7gwt1/g=
 by: Tim Rentsch - Fri, 18 Mar 2022 14:02 UTC

Philipp Klaus Krause <pkk@spth.de> writes:

> C has multiple ways to write function pointer parameters (name is
> optional, functiond ecays to function pointer).
>
> So, according to my understanding, these three are equivalent:
>
> int f9 (int (*)(int), int);
> int f9 (int (int), int);
> int f9 (int f(int), int i);
>
> However, I have also seen the followign as equivalent (and both GCC
> and clang accept it wihout warning), but don't see what allows the
> extra parentheses
>
> int f9 (int ((int)), int);

The syntax for declarators, in 6.7.6 paragraph 1, obviously
allows

int x;
int (x);
int ((x));
int (((x)));

and so forth. Similarly the syntax for type names, in 6.7.7
paragraph 1, allows

int f ( int (int) );
int f ( int ((int)) );
int f ( int (((int))) );
int f ( int ((((int)))) );

Both of these are expectable because the corresponding
expressions are allowed:

x
(x)
((x))
(((x)))

g(x)
(g(x))
((g(x)))
(((g(x))))

Re: Extra parentheses in function pointer declaration?

<f9-20220320144135@ram.dialup.fu-berlin.de>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=20906&group=comp.lang.c#20906

  copy link   Newsgroups: comp.lang.c
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!not-for-mail
From: ram...@zedat.fu-berlin.de (Stefan Ram)
Newsgroups: comp.lang.c
Subject: Re: Extra parentheses in function pointer declaration?
Date: 20 Mar 2022 13:43:09 GMT
Organization: Stefan Ram
Lines: 198
Expires: 1 Apr 2023 11:59:58 GMT
Message-ID: <f9-20220320144135@ram.dialup.fu-berlin.de>
References: <t11shm$a7qf$1@solani.org>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Trace: news.uni-berlin.de YvZTu8w7YmY1wyounZeDDgZid32UxCkaY0GTYkEKEymcLQ
X-Copyright: (C) Copyright 2022 Stefan Ram. All rights reserved.
Distribution through any means other than regular usenet
channels is forbidden. It is forbidden to publish this
article in the Web, to change URIs of this article into links,
and to transfer the body without this notice, but quotations
of parts in other Usenet posts are allowed.
X-No-Archive: Yes
Archive: no
X-No-Archive-Readme: "X-No-Archive" is set, because this prevents some
services to mirror the article in the web. But the article may
be kept on a Usenet archive server with only NNTP access.
X-No-Html: yes
Content-Language: en-US
Accept-Language: de-DE, en-US, it, fr-FR
 by: Stefan Ram - Sun, 20 Mar 2022 13:43 UTC

Philipp Klaus Krause <pkk@spth.de> writes:
>int f9 (int ((int)), int);

I'm not able to parse

int f9 (int ((int)));

with the C grammar. I see that some compilers seem to accept it.

rule:

declaration:
declaration-specifiers init-declarator-listopt ;

application:

declaration-specifiers = int
init-declarator-list =? f9 (int ((int)))
; = ;

rule:

init-declarator-list:
init-declarator

application:

init-declarator =? f9 (int ((int)))

rule:

init-declarator:
declarator

application

declarator =? f9 (int ((int)))

rule:

declarator:
pointeropt direct-declarator

application:

pointeropt =
direct-declarator =? f9 (int ((int)))

rule:

direct-declarator:
direct-declarator ( parameter-type-list )

application:

direct-declarator = f9
( = (
parameter-type-list =? int ((int))
) = )

rule:

parameter-type-list:
parameter-list

application:

parameter-list =? int ((int))

rule:

parameter-list:
parameter-declaration

application:

parameter-declaration =? int ((int))

rule:

parameter-declaration:
declaration-specifiers abstract-declaratoropt

application:

declaration-specifiers = type-specifier = int
abstract-declarator =? ((int))

rule:

abstract-declarator:
pointeropt direct-abstract-declarator

application:

direct-abstract-declarator =? ((int))

rule:

direct-abstract-declarator:
( abstract-declarator )

application:

( = (
abstract-declarator =? (int)
) = )

rule:

abstract-declarator:
pointeropt direct-abstract-declarator

application:

direct-abstract-declarator =? (int)

rule:

direct-abstract-declarator:
( abstract-declarator )

application:

( = (
abstract-declarator =? int
) = )

rule:

abstract-declarator:
pointeropt direct-abstract-declarator

application:

direct-abstract-declarator =? int

This fails, because "int" is not a direct-abstract-declarator.
We can also try the other branch without "abstract":

application:

parameter-declaration =? int ((int))

rule:

parameter-declaration:
declaration-specifiers declarator

application:

declaration-specifiers = type-specifier = int
declarator =? ((int))

rule:

declarator:
pointeropt direct-declarator

application:

direct-declarator =? ((int))

rule:

direct-declarator:
( declarator )

application:

( = (
declarator =? (int)
) = )

rule

declarator:
pointeropt direct-declarator

application:

direct-declarator =? (int)

rule:

direct-declarator:
( declarator )

application:

( = (
declarator =? int
) = )

This also fails, because "int" is not a declarator
(it is not an identifier, but a keyword).

Re: Extra parentheses in function pointer declaration?

<87o820n0ok.fsf@bsb.me.uk>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=20907&group=comp.lang.c#20907

  copy link   Newsgroups: comp.lang.c
Path: i2pn2.org!i2pn.org!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: ben.use...@bsb.me.uk (Ben Bacarisse)
Newsgroups: comp.lang.c
Subject: Re: Extra parentheses in function pointer declaration?
Date: Sun, 20 Mar 2022 14:44:27 +0000
Organization: A noiseless patient Spider
Lines: 156
Message-ID: <87o820n0ok.fsf@bsb.me.uk>
References: <t11shm$a7qf$1@solani.org>
<f9-20220320144135@ram.dialup.fu-berlin.de>
Mime-Version: 1.0
Content-Type: text/plain
Injection-Info: reader02.eternal-september.org; posting-host="676fdda65164f3a38beba70df3828b88";
logging-data="7990"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX182xgaqxTUPoSC5NPBfEgDzG4N81wOvhzc="
Cancel-Lock: sha1:gYzY20RvpJ9NHYlsIRC+tHbNZ3I=
sha1:y9gzo8GRyySDzuF5YNriJqla9wM=
X-BSB-Auth: 1.0de0385cff1a09f43890.20220320144427GMT.87o820n0ok.fsf@bsb.me.uk
 by: Ben Bacarisse - Sun, 20 Mar 2022 14:44 UTC

ram@zedat.fu-berlin.de (Stefan Ram) writes:

> Philipp Klaus Krause <pkk@spth.de> writes:
>>int f9 (int ((int)), int);
>
> I'm not able to parse
>
> int f9 (int ((int)));
>
> with the C grammar. I see that some compilers seem to accept it.
>
> rule:
>
> declaration:
> declaration-specifiers init-declarator-listopt ;
>
> application:
>
> declaration-specifiers = int
> init-declarator-list =? f9 (int ((int)))
> ; = ;

Yup.

> rule:
>
> init-declarator-list:
> init-declarator
>
> application:
>
> init-declarator =? f9 (int ((int)))
>
> rule:
>
> init-declarator:
> declarator
>
> application
>
> declarator =? f9 (int ((int)))
>
> rule:
>
> declarator:
> pointeropt direct-declarator
>
> application:
>
> pointeropt =
> direct-declarator =? f9 (int ((int)))

Yup.

> rule:
>
> direct-declarator:
> direct-declarator ( parameter-type-list )

OK, but a rule has been skipped (as far as C20 is concerned). This is a
function-declarator which can be a direct-declarator with a
parameter-type-list in parentheses. (The changes are for including
attributes.)

> application:
>
> direct-declarator = f9
> ( = (
> parameter-type-list =? int ((int))
> ) = )
>
> rule:
>
> parameter-type-list:
> parameter-list
>
> application:
>
> parameter-list =? int ((int))
>
> rule:
>
> parameter-list:
> parameter-declaration
>
> application:
>
> parameter-declaration =? int ((int))
>
> rule:
>
> parameter-declaration:
> declaration-specifiers abstract-declaratoropt
>
> application:
>
> declaration-specifiers = type-specifier = int
> abstract-declarator =? ((int))
>
> rule:
>
> abstract-declarator:
> pointeropt direct-abstract-declarator
>
> application:
>
> direct-abstract-declarator =? ((int))
>
> rule:
>
> direct-abstract-declarator:
> ( abstract-declarator )
>
> application:
>
> ( = (
> abstract-declarator =? (int)
> ) = )
>
> rule:
>
> abstract-declarator:
> pointeropt direct-abstract-declarator
>
> application:
>
> direct-abstract-declarator =? (int)
>
> rule:
>
> direct-abstract-declarator:
> ( abstract-declarator )

There is another rule here. We have (using ? for subscript opt):

direct-abstract-declarator:
( abstract-declarator )
array-abstract-declarator attribute-specifier-sequence?
function-abstract-declarator attribute-specifier-sequence?

so maybe (int) is a function-abstract-declarator. Let's see:

function-abstract-declarator:
direct-abstract-declarator? ( parameter-type-list? )

so is int a parameter-type_list, i.e. is it a parameter-list, i.e. is it
a parameter-declaration?

parameter-declaration:
attribute-specifier-sequence? declaration-specifiers declarator
attribute-specifier-sequence? declaration-specifiers abstract-declarator?

Yes. int is indeed a match for declaration-specifiers.

--
Ben.

Re: Extra parentheses in function pointer declaration?

<20220320075102.841@kylheku.com>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=20908&group=comp.lang.c#20908

  copy link   Newsgroups: comp.lang.c
Path: i2pn2.org!i2pn.org!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: 480-992-...@kylheku.com (Kaz Kylheku)
Newsgroups: comp.lang.c
Subject: Re: Extra parentheses in function pointer declaration?
Date: Sun, 20 Mar 2022 15:01:50 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 52
Message-ID: <20220320075102.841@kylheku.com>
References: <t11shm$a7qf$1@solani.org>
Injection-Date: Sun, 20 Mar 2022 15:01:50 -0000 (UTC)
Injection-Info: reader02.eternal-september.org; posting-host="369c6c202317da848d71de4a91192c84";
logging-data="8970"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19d3TBBVc0VSMfLHBLb21rIzqs8ZG5fq54="
User-Agent: slrn/1.0.3 (Linux)
Cancel-Lock: sha1:Nbfm9hcPeQOLzc38xktXHQ7EEPI=
 by: Kaz Kylheku - Sun, 20 Mar 2022 15:01 UTC

On 2022-03-18, Philipp Klaus Krause <pkk@spth.de> wrote:
> C has multiple ways to write function pointer parameters (name is
> optional, functiond ecays to function pointer).
>
> So, according to my understanding, these three are equivalent:
>
> int f9 (int (*)(int), int);
> int f9 (int (int), int);
> int f9 (int f(int), int i);
>
> However, I have also seen the followign as equivalent (and both GCC and
> clang accept it wihout warning), but don't see what allows the extra
> parentheses
>
> int f9 (int ((int)), int);

This is because any declarator can have parentheses on it,
including one which already has parentheses.

As you know C declarators suppor parentheses in order to distinguish
cases like int *a[10] from int (*a)[10].

Here *a[10] is a declarator. But so is just the *a part.

Any of these can have parentheses: so we can have a full
parenthesization like this: int ((*a)[10]).

Declarators are de facto type constructing expressions which have unary
and postfix de facto operators. The postfix ones have higher precedence
than unary, which is sometimes what you don't want, so the syntax
features grouping parentheses, just like expression syntax.

Now as you know, the declared name can be omitted in declarators
in some situations, like when function parameters are being
declared:

// here we have a param name
f9(int fptr(int));

// now we heap superfluous parens on the declarator
f9(int ((fptr(int))));

// now we omit the name, as we may do in this context
f9(int (((int))));

That's it; (int) is a function declarator with omitted name, onto which
extra parentheses have been lavished.

--
TXR Programming Language: http://nongnu.org/txr
Cygnal: Cygwin Native Application Library: http://kylheku.com/cygnal

Re: Extra parentheses in function pointer declaration?

<87ils8mzc1.fsf@bsb.me.uk>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=20909&group=comp.lang.c#20909

  copy link   Newsgroups: comp.lang.c
Path: i2pn2.org!i2pn.org!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: ben.use...@bsb.me.uk (Ben Bacarisse)
Newsgroups: comp.lang.c
Subject: Re: Extra parentheses in function pointer declaration?
Date: Sun, 20 Mar 2022 15:13:34 +0000
Organization: A noiseless patient Spider
Lines: 32
Message-ID: <87ils8mzc1.fsf@bsb.me.uk>
References: <t11shm$a7qf$1@solani.org> <20220320075102.841@kylheku.com>
Mime-Version: 1.0
Content-Type: text/plain
Injection-Info: reader02.eternal-september.org; posting-host="676fdda65164f3a38beba70df3828b88";
logging-data="2415"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/5OeedetOGQlUqVWvN7p4Fr0tUzzAjXYw="
Cancel-Lock: sha1:1EYzw+KKP+w/p4PabcKc3/sPxf0=
sha1:CM+3pHcVfuzurVoOttctXFnfILk=
X-BSB-Auth: 1.3a6ce6fdbf9ece98d440.20220320151334GMT.87ils8mzc1.fsf@bsb.me.uk
 by: Ben Bacarisse - Sun, 20 Mar 2022 15:13 UTC

Kaz Kylheku <480-992-1380@kylheku.com> writes:

> On 2022-03-18, Philipp Klaus Krause <pkk@spth.de> wrote:
>> C has multiple ways to write function pointer parameters (name is
>> optional, functiond ecays to function pointer).
>>
>> So, according to my understanding, these three are equivalent:
>>
>> int f9 (int (*)(int), int);
>> int f9 (int (int), int);
>> int f9 (int f(int), int i);
>>
>> However, I have also seen the followign as equivalent (and both GCC and
>> clang accept it wihout warning), but don't see what allows the extra
>> parentheses
>>
>> int f9 (int ((int)), int);
>
> This is because any declarator can have parentheses on it,
> including one which already has parentheses.

But int is not a declarator -- a declarator always has a name. int is
an abstract-declarator and, yes, that too can have arbitrary
parentheses, but even that does not explain this syntax.

You need to find a place where an abstract-declarator is allowed, and
that removes one pair of parentheses. It's the presence of the outer
int (...) part allows the inner (int) part to be parsed as an
abstract-declarator.

--
Ben.

Re: Extra parentheses in function pointer declaration?

<t1b51s$9c2$1@dont-email.me>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=20934&group=comp.lang.c#20934

  copy link   Newsgroups: comp.lang.c
Path: i2pn2.org!i2pn.org!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: andreyta...@hotmail.com (Andrey Tarasevich)
Newsgroups: comp.lang.c
Subject: Re: Extra parentheses in function pointer declaration?
Date: Mon, 21 Mar 2022 17:25:31 -0700
Organization: A noiseless patient Spider
Lines: 12
Message-ID: <t1b51s$9c2$1@dont-email.me>
References: <t11shm$a7qf$1@solani.org>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Tue, 22 Mar 2022 00:25:33 -0000 (UTC)
Injection-Info: reader02.eternal-september.org; posting-host="c04e04cd65c44b2f0c933f16d4c4a402";
logging-data="9602"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/o+Le27ddQ2hDRVmZvA1Sv"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101
Thunderbird/91.6.1
Cancel-Lock: sha1:SYS3EOC9KwyeP+DrptWyY/TgEGY=
In-Reply-To: <t11shm$a7qf$1@solani.org>
Content-Language: en-US
 by: Andrey Tarasevich - Tue, 22 Mar 2022 00:25 UTC

On 3/18/2022 5:05 AM, Philipp Klaus Krause wrote:
> However, I have also seen the followign as equivalent (and both GCC and
> clang accept it wihout warning), but don't see what allows the extra
> parentheses
>
> int f9 (int ((int)), int);

What allows? The grammar allows. That's all.

--
Best regards,
Andrey Tarasevich

Re: Extra parentheses in function pointer declaration?

<830ad06f-efa6-4076-98f0-20cfa0e3dd21n@googlegroups.com>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=20935&group=comp.lang.c#20935

  copy link   Newsgroups: comp.lang.c
X-Received: by 2002:ac8:5acd:0:b0:2e1:e117:b303 with SMTP id d13-20020ac85acd000000b002e1e117b303mr19123455qtd.216.1647909448001;
Mon, 21 Mar 2022 17:37:28 -0700 (PDT)
X-Received: by 2002:ad4:5ccb:0:b0:441:1abe:1b8a with SMTP id
iu11-20020ad45ccb000000b004411abe1b8amr7375334qvb.7.1647909447839; Mon, 21
Mar 2022 17:37:27 -0700 (PDT)
Path: i2pn2.org!i2pn.org!weretis.net!feeder6.news.weretis.net!news.misty.com!border2.nntp.dca1.giganews.com!nntp.giganews.com!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: comp.lang.c
Date: Mon, 21 Mar 2022 17:37:27 -0700 (PDT)
In-Reply-To: <t1b51s$9c2$1@dont-email.me>
Injection-Info: google-groups.googlegroups.com; posting-host=108.48.119.9; posting-account=Ix1u_AoAAAAILVQeRkP2ENwli-Uv6vO8
NNTP-Posting-Host: 108.48.119.9
References: <t11shm$a7qf$1@solani.org> <t1b51s$9c2$1@dont-email.me>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <830ad06f-efa6-4076-98f0-20cfa0e3dd21n@googlegroups.com>
Subject: Re: Extra parentheses in function pointer declaration?
From: jameskuy...@alumni.caltech.edu (james...@alumni.caltech.edu)
Injection-Date: Tue, 22 Mar 2022 00:37:27 +0000
Content-Type: text/plain; charset="UTF-8"
Lines: 19
 by: james...@alumni.calt - Tue, 22 Mar 2022 00:37 UTC

On Monday, March 21, 2022 at 8:25:45 PM UTC-4, Andrey Tarasevich wrote:
> On 3/18/2022 5:05 AM, Philipp Klaus Krause wrote:
> > However, I have also seen the followign as equivalent (and both GCC and
> > clang accept it wihout warning), but don't see what allows the extra
> > parentheses
> >
> > int f9 (int ((int)), int);
> What allows? The grammar allows. That's all.

That's not a particularly useful response. A citation of the specific grammar
rules used by this particular piece of syntax (which other people have already
provided) is a much more useful response.

For me, the trickiest aspect of this issue is the question of which pair of
parentheses are the redundant ones. My thought is that the innermost
parentheses were redundantly parenthesizing a parameter's type, and I
struggled to find the grammar rules that permitted it. After carefully studying
other people's responses, I realized that (int) is an abstract declaration of a
function type, and that the parentheses around that declaration are the
redundant ones.

1
server_pubkey.txt

rocksolid light 0.9.8
clearnet tor