Author: kelnos
Date: 2008-04-14 06:00:10 +0000 (Mon, 14 Apr 2008)
New Revision: 26834

Added:
   xfconf/trunk/xfconfd/xfconf-locking-utils.c
   xfconf/trunk/xfconfd/xfconf-locking-utils.h
Removed:
   xfconf/trunk/common/xfconf-util.c
   xfconf/trunk/common/xfconf-util.h
Modified:
   xfconf/trunk/common/Makefile.am
   xfconf/trunk/common/xfconf-gvaluefuncs.c
   xfconf/trunk/common/xfconf-gvaluefuncs.h
   xfconf/trunk/common/xfconf-types.c
   xfconf/trunk/xfconf/Makefile.am
   xfconf/trunk/xfconfd/Makefile.am
   xfconf/trunk/xfconfd/xfconf-backend-perchannel-xml.c
   xfconf/trunk/xfconfd/xfconf-daemon.c
Log:
do some rearranging of code locations

* the locking evaluation stuff is really only needed in the daemon
* clean up an extra copy of xfconf_g_value_free()
* move _xfconf_gtype_from_string() to gvaluefuncs
* compile xfconf-types.c directly into the daemon and libxfconf separately
  to avoid problems with the aliasdef stuff


Modified: xfconf/trunk/common/Makefile.am
===================================================================
--- xfconf/trunk/common/Makefile.am     2008-04-13 20:46:32 UTC (rev 26833)
+++ xfconf/trunk/common/Makefile.am     2008-04-14 06:00:10 UTC (rev 26834)
@@ -6,10 +6,7 @@
 libxfconf_common_la_SOURCES = \
        xfconf-errors.c \
        xfconf-marshal.c \
-       xfconf-marshal.h \
-       xfconf-types.c \
-       xfconf-util.c \
-       xfconf-util.h
+       xfconf-marshal.h
 
 libxfconf_common_la_CFLAGS = \
        -DLIBXFCONF_COMPILATION \
@@ -74,4 +71,5 @@
        xfconf-aliasdef.c \
        xfconf-common-private.h \
        xfconf-dbus.xml \
-       xfconf-marshal.list
+       xfconf-marshal.list \
+       xfconf-types.c

Modified: xfconf/trunk/common/xfconf-gvaluefuncs.c
===================================================================
--- xfconf/trunk/common/xfconf-gvaluefuncs.c    2008-04-13 20:46:32 UTC (rev 
26833)
+++ xfconf/trunk/common/xfconf-gvaluefuncs.c    2008-04-14 06:00:10 UTC (rev 
26834)
@@ -63,6 +63,41 @@
 #define XFCONF_MAXUCHAR  (255)
 #endif
 
+GType
+_xfconf_gtype_from_string(const gchar *type)
+{
+    if(!strcmp(type, "string"))
+        return G_TYPE_STRING;
+    else if(!strcmp(type, "uchar"))
+        return G_TYPE_UCHAR;
+    else if(!strcmp(type, "char"))
+        return G_TYPE_CHAR;
+    else if(!strcmp(type, "uint16"))
+        return XFCONF_TYPE_UINT16;
+    else if(!strcmp(type, "int16"))
+        return XFCONF_TYPE_INT16;
+    else if(!strcmp(type, "uint"))
+        return G_TYPE_UINT;
+    else if(!strcmp(type, "int"))
+        return G_TYPE_INT;
+    else if(!strcmp(type, "uint64"))
+        return G_TYPE_UINT64;
+    else if(!strcmp(type, "int64"))
+        return G_TYPE_INT64;
+    else if(!strcmp(type, "float"))
+        return G_TYPE_FLOAT;
+    else if(!strcmp(type, "double"))
+        return G_TYPE_DOUBLE;
+    else if(!strcmp(type, "bool"))
+        return G_TYPE_BOOLEAN;
+    else if(!strcmp(type, "array"))
+        return XFCONF_TYPE_G_VALUE_ARRAY;
+    else if(!strcmp(type, "empty"))
+        return G_TYPE_NONE;
+    
+    return G_TYPE_INVALID;
+}
+
 gboolean
 _xfconf_gvalue_from_string(GValue *value,
                            const gchar *str)

Modified: xfconf/trunk/common/xfconf-gvaluefuncs.h
===================================================================
--- xfconf/trunk/common/xfconf-gvaluefuncs.h    2008-04-13 20:46:32 UTC (rev 
26833)
+++ xfconf/trunk/common/xfconf-gvaluefuncs.h    2008-04-14 06:00:10 UTC (rev 
26834)
@@ -24,6 +24,8 @@
 
 G_BEGIN_DECLS
 
+GType _xfconf_gtype_from_string(const gchar *type) G_GNUC_INTERNAL;
+
 gboolean _xfconf_gvalue_from_string(GValue *value,
                                     const gchar *str) G_GNUC_INTERNAL;
 

Modified: xfconf/trunk/common/xfconf-types.c
===================================================================
--- xfconf/trunk/common/xfconf-types.c  2008-04-13 20:46:32 UTC (rev 26833)
+++ xfconf/trunk/common/xfconf-types.c  2008-04-14 06:00:10 UTC (rev 26834)
@@ -184,6 +184,7 @@
 }
 
 
-
+#ifdef LIBXFCONF_COMPILATION
 #define __XFCONF_TYPES_C__
 #include "xfconf-aliasdef.c"
+#endif

Deleted: xfconf/trunk/common/xfconf-util.c

Deleted: xfconf/trunk/common/xfconf-util.h

Modified: xfconf/trunk/xfconf/Makefile.am
===================================================================
--- xfconf/trunk/xfconf/Makefile.am     2008-04-13 20:46:32 UTC (rev 26833)
+++ xfconf/trunk/xfconf/Makefile.am     2008-04-14 06:00:10 UTC (rev 26834)
@@ -13,7 +13,8 @@
        xfconf-channel.c \
        xfconf-dbus-bindings.h \
        xfconf-private.h \
-       xfconf.c
+       xfconf.c \
+       $(top_srcdir)/common/xfconf-types.c
 
 libxfconf_0_la_CFLAGS = \
        -I$(top_srcdir) \

Modified: xfconf/trunk/xfconfd/Makefile.am
===================================================================
--- xfconf/trunk/xfconfd/Makefile.am    2008-04-13 20:46:32 UTC (rev 26833)
+++ xfconf/trunk/xfconfd/Makefile.am    2008-04-14 06:00:10 UTC (rev 26834)
@@ -18,7 +18,10 @@
        xfconf-daemon.c \
        xfconf-daemon.h \
        xfconf-dbus-server.h \
-       $(xfconf_backend_sources)
+       xfconf-locking-utils.c \
+       xfconf-locking-utils.h \
+       $(xfconf_backend_sources) \
+       $(top_srcdir)/common/xfconf-types.c
 
 xfconfd_CFLAGS = \
        -DLIBXFCONF_COMPILATION \

Modified: xfconf/trunk/xfconfd/xfconf-backend-perchannel-xml.c
===================================================================
--- xfconf/trunk/xfconfd/xfconf-backend-perchannel-xml.c        2008-04-13 
20:46:32 UTC (rev 26833)
+++ xfconf/trunk/xfconfd/xfconf-backend-perchannel-xml.c        2008-04-14 
06:00:10 UTC (rev 26834)
@@ -56,7 +56,7 @@
 
 #include "xfconf-backend-perchannel-xml.h"
 #include "xfconf-backend.h"
-#include "xfconf-util.h"
+#include "xfconf-locking-utils.h"
 #include "xfconf-gvaluefuncs.h"
 #include "xfconf/xfconf-types.h"
 #include "xfconf-common-private.h"
@@ -793,41 +793,6 @@
     return properties;
 }
 
-static GType
-xfconf_string_type_to_gtype(const gchar *type)
-{
-    if(!strcmp(type, "string"))
-        return G_TYPE_STRING;
-    else if(!strcmp(type, "uchar"))
-        return G_TYPE_UCHAR;
-    else if(!strcmp(type, "char"))
-        return G_TYPE_CHAR;
-    else if(!strcmp(type, "uint16"))
-        return XFCONF_TYPE_UINT16;
-    else if(!strcmp(type, "int16"))
-        return XFCONF_TYPE_INT16;
-    else if(!strcmp(type, "uint"))
-        return G_TYPE_UINT;
-    else if(!strcmp(type, "int"))
-        return G_TYPE_INT;
-    else if(!strcmp(type, "uint64"))
-        return G_TYPE_UINT64;
-    else if(!strcmp(type, "int64"))
-        return G_TYPE_INT64;
-    else if(!strcmp(type, "float"))
-        return G_TYPE_FLOAT;
-    else if(!strcmp(type, "double"))
-        return G_TYPE_DOUBLE;
-    else if(!strcmp(type, "bool"))
-        return G_TYPE_BOOLEAN;
-    else if(!strcmp(type, "array"))
-        return XFCONF_TYPE_G_VALUE_ARRAY;
-    else if(!strcmp(type, "empty"))
-        return G_TYPE_NONE;
-    
-    return G_TYPE_INVALID;
-}
-
 static void
 xfconf_backend_perchannel_xml_start_elem(GMarkupParseContext *context,
                                          const gchar *element_name,
@@ -1029,7 +994,7 @@
                 }
                 
                 /* parse types and values */
-                value_type = xfconf_string_type_to_gtype(type);
+                value_type = _xfconf_gtype_from_string(type);
                 if(G_TYPE_INVALID == value_type) {
                     if(error) {
                         g_set_error(error, G_MARKUP_ERROR,
@@ -1090,7 +1055,7 @@
                     }
                 }
                 
-                value_type = xfconf_string_type_to_gtype(type);
+                value_type = _xfconf_gtype_from_string(type);
                 if(XFCONF_TYPE_G_VALUE_ARRAY == value_type) {
                     if(error) {
                         g_set_error(error, G_MARKUP_ERROR,

Modified: xfconf/trunk/xfconfd/xfconf-daemon.c
===================================================================
--- xfconf/trunk/xfconfd/xfconf-daemon.c        2008-04-13 20:46:32 UTC (rev 
26833)
+++ xfconf/trunk/xfconfd/xfconf-daemon.c        2008-04-14 06:00:10 UTC (rev 
26834)
@@ -28,7 +28,6 @@
 #include "xfconf-backend-factory.h"
 #include "xfconf-backend.h"
 #include "xfconf-marshal.h"
-#include "xfconf-util.h"
 #include "xfconf-gvaluefuncs.h"
 #include "xfconf/xfconf-errors.h"
 

Copied: xfconf/trunk/xfconfd/xfconf-locking-utils.c (from rev 26833, 
xfconf/trunk/common/xfconf-util.c)
===================================================================
--- xfconf/trunk/xfconfd/xfconf-locking-utils.c                         (rev 0)
+++ xfconf/trunk/xfconfd/xfconf-locking-utils.c 2008-04-14 06:00:10 UTC (rev 
26834)
@@ -0,0 +1,133 @@
+/*
+ *  xfconf
+ *
+ *  Copyright (c) 2007 Brian Tarricone <[EMAIL PROTECTED]>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; version 2 of the License ONLY.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+
+#ifdef HAVE_GRP_H
+#include <grp.h>
+#endif
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include "xfconf-locking-utils.h"
+
+/* group cache stuff */
+
+static time_t etc_group_mtime = 0;
+static GHashTable *group_cache = NULL;
+
+static void
+xfconf_ensure_group_cache()
+{
+    gboolean needs_rebuild = FALSE;
+    struct stat st;
+    struct group *gr;
+    GHashTable *members;
+        
+    if(!stat("/etc/group", &st)) {
+        if(st.st_mtime > etc_group_mtime) {
+            etc_group_mtime = st.st_mtime;
+            needs_rebuild = TRUE;
+        }
+    } else
+        needs_rebuild = TRUE;        
+    
+    if(!needs_rebuild && group_cache)
+        return;
+    
+    if(group_cache)
+        g_hash_table_destroy(group_cache);
+    
+    group_cache = g_hash_table_new_full(g_str_hash, g_str_equal,
+                                        (GDestroyNotify)g_free,
+                                        (GDestroyNotify)g_hash_table_destroy);
+    
+    for(setgrent(), gr = getgrent(); gr; gr = getgrent()) {
+        gint i;
+        
+        members = g_hash_table_new_full(g_str_hash, g_str_equal,
+                                        (GDestroyNotify)g_free, NULL);
+        
+        for(i = 0; gr->gr_mem[i]; ++i) {
+            g_hash_table_replace(members, g_strdup(gr->gr_mem[i]),
+                                 GINT_TO_POINTER(1));
+        }
+        
+        g_hash_table_replace(group_cache, g_strdup(gr->gr_name), members);
+    }
+}
+
+static gboolean
+xfconf_user_is_in_group(const gchar *user,
+                        const gchar *group)
+{
+    GHashTable *members;
+    
+    xfconf_ensure_group_cache();
+    
+    members = g_hash_table_lookup(group_cache, group);
+    
+    if(G_UNLIKELY(!members))
+        return FALSE;
+    
+    return g_hash_table_lookup(members, user) ? TRUE : FALSE;
+}
+
+gboolean
+xfconf_user_is_in_list(const gchar *list)
+{
+    gboolean ret = FALSE;
+    const gchar *user_name = g_get_user_name();
+    gchar **tokens;
+    gint i;
+    
+    tokens = g_strsplit(list, ";", -1);
+    
+    for(i = 0; tokens[i]; ++i) {
+        if(!*tokens[i])
+            continue;
+        else if(*tokens[i] == '@') {
+            if(xfconf_user_is_in_group(user_name, tokens[i]+1)) {
+                ret = TRUE;
+                break;
+            }
+        } else {
+            if(!strcmp(user_name, tokens[i])) {
+                ret = TRUE;
+                break;
+            }
+        }
+    }
+    
+    g_strfreev(tokens);
+    
+    return ret;
+}

Copied: xfconf/trunk/xfconfd/xfconf-locking-utils.h (from rev 26833, 
xfconf/trunk/common/xfconf-util.h)
===================================================================
--- xfconf/trunk/xfconfd/xfconf-locking-utils.h                         (rev 0)
+++ xfconf/trunk/xfconfd/xfconf-locking-utils.h 2008-04-14 06:00:10 UTC (rev 
26834)
@@ -0,0 +1,33 @@
+/*
+ *  xfconf
+ *
+ *  Copyright (c) 2007 Brian Tarricone <[EMAIL PROTECTED]>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; version 2 of the License ONLY.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __XFCONF_UTIL_H__
+#define __XFCONF_UTIL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define  XFCONF_DBUS_TYPE_G_DOUBLE_ARRAY  
(dbus_g_type_get_collection("GArray", G_TYPE_DOUBLE))
+
+gboolean xfconf_user_is_in_list(const gchar *list) G_GNUC_INTERNAL;
+
+G_END_DECLS
+
+#endif  /* __XFCONF_UTIL_H__ */

_______________________________________________
Xfce4-commits mailing list
Xfce4-commits@xfce.org
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to