Subject: bug#50507: New function in Emacs GnuTLS implementation

From: Eli Zaretskii <[email-masked]>
Date: Fri, 30 Sep 2022 13:47:06 +0300

> From: Nikolaos Chatzikonstantinou <[email-masked]>
> Date: Fri, 30 Sep 2022 06:04:30 -0400
> Cc: [email-masked], Lars Ingebrigtsen <[email-masked]>, Eli Zaretskii <[email-masked]>
> 
> 
> On Thu, Sep 29, 2022 at 10:08 AM Robert Pluim <[email-masked]> wrote:
> >
> > >>>>> On Thu, 29 Sep 2022 09:44:09 -0400, Nikolaos Chatzikonstantinou <[email-masked]> said:
> >     Nikolaos> +The :pass and :flags keys are ignored with old versions of GnuTLS, and
> >     Nikolaos> +:flags is ignored if :pass is not specified.
> >     Nikolaos> +
> >     >>
> >     >> Maybe mention that not specifying :flags or passing :flags nil means
> >     >> passing '0' to the GnuTLS function?
> >
> >     Nikolaos> Yes, and on that note, I discovered two things. One, the value 0 is
> >     Nikolaos> special; it has meaning but it is not an enumeration constant. I
> >     Nikolaos> documented this appropriately. Two, the password may be NULL instead
> >     Nikolaos> of a string.
> >
> > OK. I guess youʼre mapping ':pass nil' to that?
> 
> Yes.
> 
> >     Nikolaos> +  DEFSYM (Qgnutls_pkcs_plain, "GNUTLS_PKCS_PLAIN");
> >     Nikolaos> <removed a few more such lines>
> >     Nikolaos> +  DEFSYM (Qgnutls_pkcs_pbes2_gost_cpd, "GNUTLS_PKCS_PBES2_GOST_CPD");
> >     >>
> >     >> All this is kind of awkward, but apart from doing DEFVAR_LISP Iʼm not
> >     >> aware of how to define a lisp level symbol with a value (it would
> >     >> allow you to simplify `key_file2_aux', since you could just extract
> >     >> the values directly from the symbols).
> >
> >     Nikolaos> I am now comparing against intern("GNUTLS_PKCS_PLAIN") and so on.
> >
> > I guess thatʼs another option, but itʼs not the preferred
> > solution. Anyway, letʼs not let the perfect be the enemy of the good.
> 
> I went with intern.

Why not use DEFSYM and then compare against the static symbols?  That
is more efficient, since the intern call is avoided at run time.