]> git.meshlink.io Git - catta/blobdiff - avahi-utils/stdb.c
l10n: Updated French (fr) translation to 99%
[catta] / avahi-utils / stdb.c
index 388bf6b508860a0dd597e4405fd775c475ff637b..6602c97190587398299206fb4b0a5be2ee316b6e 100644 (file)
@@ -1,18 +1,16 @@
-/* $Id$ */
-
 /***
   This file is part of avahi.
+
   avahi is free software; you can redistribute it and/or modify it
   under the terms of the GNU Lesser General Public License as
   published by the Free Software Foundation; either version 2.1 of the
   License, or (at your option) any later version.
+
   avahi 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 Lesser General
   Public License for more details.
+
   You should have received a copy of the GNU Lesser General Public
   License along with avahi; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
@@ -43,6 +41,7 @@ static GDBM_FILE gdbm_file = NULL;
 static DBM *dbm_file = NULL;
 #endif
 static char *buffer = NULL;
+static char *enum_key = NULL;
 
 static int init(void) {
 
@@ -73,10 +72,10 @@ const char* stdb_lookup(const char *name) {
 
     data.dptr = NULL;
     data.dsize = 0;
-    
+
     if ((loc = setlocale(LC_MESSAGES, NULL))) {
         char k[256];
-        
+
         snprintf(k, sizeof(k), "%s[%s]", name, loc);
         key.dptr = k;
         key.dsize = strlen(k);
@@ -90,7 +89,7 @@ const char* stdb_lookup(const char *name) {
         if (!data.dptr) {
             char l[32], *e;
             snprintf(l, sizeof(l), "%s", loc);
-            
+
             if ((e = strchr(l, '@'))) {
                 *e = 0;
                 snprintf(k, sizeof(k), "%s[%s]", name, l);
@@ -138,9 +137,9 @@ const char* stdb_lookup(const char *name) {
     avahi_free(buffer);
     buffer = avahi_strndup(data.dptr, data.dsize);
     free(data.dptr);
-    
+
     return buffer;
-    
+
 fail:
 
     return name;
@@ -150,11 +149,64 @@ void stdb_shutdown(void) {
 #ifdef HAVE_GDBM
     if (gdbm_file)
         gdbm_close(gdbm_file);
+
+    gdbm_file = NULL;
 #endif
 #ifdef HAVE_DBM
     if (dbm_file)
         dbm_close(dbm_file);
+
+    dbm_file = NULL;
 #endif
 
     avahi_free(buffer);
+    avahi_free(enum_key);
+
+    buffer = enum_key = NULL;
+}
+
+char *stdb_getent(void) {
+    datum key;
+
+    if (init() < 0)
+        return NULL;
+
+    for (;;) {
+
+        if (!enum_key) {
+#ifdef HAVE_GDBM
+            key = gdbm_firstkey(gdbm_file);
+#endif
+#ifdef HAVE_DBM
+            key = dbm_firstkey(dbm_file);
+#endif
+        } else {
+            key.dptr = enum_key;
+            key.dsize = strlen(enum_key);
+
+#ifdef HAVE_GDBM
+            key = gdbm_nextkey(gdbm_file, key);
+#endif
+#ifdef HAVE_DBM
+            key = dbm_nextkey(dbm_file);
+#endif
+        }
+
+        avahi_free(enum_key);
+        enum_key = NULL;
+
+        if (!key.dptr)
+            return NULL;
+
+        enum_key = avahi_strndup(key.dptr, key.dsize);
+        free(key.dptr);
+
+        if (!strchr(enum_key, '['))
+            return enum_key;
+    }
+}
+
+void stdb_setent(void) {
+    avahi_free(enum_key);
+    enum_key = NULL;
 }