mail-notification

Fork of Jean-Yves Lefort's mail-notification, a tray icon to notify of new mail
git clone https://code.djc.id.au/git/mail-notification/

src/mn-sasl.c (1653B) - raw

      1 /*
      2  * Mail Notification
      3  * Copyright (C) 2003-2008 Jean-Yves Lefort <jylefort@brutele.be>
      4  *
      5  * This program is free software; you can redistribute it and/or modify
      6  * it under the terms of the GNU General Public License as published by
      7  * the Free Software Foundation; either version 3 of the License, or
      8  * (at your option) any later version.
      9  *
     10  * This program is distributed in the hope that it will be useful,
     11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13  * GNU General Public License for more details.
     14  *
     15  * You should have received a copy of the GNU General Public License along
     16  * with this program; if not, write to the Free Software Foundation, Inc.,
     17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
     18  */
     19 
     20 #include <glib.h>
     21 #include <glib/gi18n.h>
     22 #include <sasl/sasl.h>
     23 
     24 static gboolean attempted = FALSE;
     25 static gboolean initialized = FALSE;
     26 static char *init_error = NULL;
     27 
     28 G_LOCK_DEFINE_STATIC(init);
     29 
     30 gboolean
     31 mn_sasl_init (GError **err)
     32 {
     33   /*
     34    * Bad things may happen if we call sasl_client_init() again after
     35    * having called sasl_done(), so we just keep SASL initialized for
     36    * the whole application lifetime.
     37    */
     38 
     39   G_LOCK(init);
     40   if (! attempted)
     41     {
     42       int status;
     43 
     44       status = sasl_client_init(NULL);
     45       if (status == SASL_OK)
     46 	initialized = TRUE;
     47       else
     48 	init_error = g_strdup(sasl_errstring(status, NULL, NULL));
     49 
     50       attempted = TRUE;
     51     }
     52 
     53   if (! initialized)
     54     {
     55       g_assert(init_error != NULL);
     56       g_set_error(err, 0, 0, "%s", init_error);
     57     }
     58   G_UNLOCK(init);
     59 
     60   return initialized;
     61 }