g10/ does build again.
[gnupg.git] / jnlib / strlist.c
index 7cbaf5e..52b4d58 100644 (file)
@@ -1,5 +1,5 @@
 /* strlist.c -  string helpers
- *     Copyright (C) 1998, 2000, 2001 Free Software Foundation, Inc.
+ * Copyright (C) 1998, 2000, 2001, 2006 Free Software Foundation, Inc.
  *
  * This file is part of GnuPG.
  *
 
 #include "libjnlib-config.h"
 #include "strlist.h"
-
+#ifdef JNLIB_NEED_UTF8CONV
+#include "utf8conv.h"
+#endif
 
 void
-free_strlist( STRLIST sl )
+free_strlist( strlist_t sl )
 {
-    STRLIST sl2;
+    strlist_t sl2;
 
     for(; sl; sl = sl2 ) {
        sl2 = sl->next;
@@ -40,10 +42,10 @@ free_strlist( STRLIST sl )
 }
 
 
-STRLIST
-add_to_strlist( STRLIST *list, const char *string )
+strlist_t
+add_to_strlist( strlist_t *list, const char *string )
 {
-    STRLIST sl;
+    strlist_t sl;
 
     sl = jnlib_xmalloc( sizeof *sl + strlen(string));
     sl->flags = 0;
@@ -53,31 +55,31 @@ add_to_strlist( STRLIST *list, const char *string )
     return sl;
 }
 
-#if 0
-/****************
- * same as add_to_strlist() but if is_utf8 is *not* set a conversion
- * to UTF8 is done
- */
-STRLIST
-add_to_strlist2( STRLIST *list, const char *string, int is_utf8 )
-{
-    STRLIST sl;
 
-    if( is_utf8 )
-       sl = add_to_strlist( list, string );
-    else {
-       char *p = native_to_utf8( string );
-       sl = add_to_strlist( list, p );
-       m_free( p );
+/* Same as add_to_strlist() but if is_utf8 is *not* set, a conversion
+   to UTF-8 is done.  */
+#ifdef JNLIB_NEED_UTF8CONV
+strlist_t
+add_to_strlist2( strlist_t *list, const char *string, int is_utf8 )
+{
+  strlist_t sl;
+  
+  if (is_utf8)
+    sl = add_to_strlist( list, string );
+  else 
+    {
+      char *p = native_to_utf8( string );
+      sl = add_to_strlist( list, p );
+      jnlib_free ( p );
     }
-    return sl;
+  return sl;
 }
-#endif
+#endif /* JNLIB_NEED_UTF8CONV*/
 
-STRLIST
-append_to_strlist( STRLIST *list, const char *string )
+strlist_t
+append_to_strlist( strlist_t *list, const char *string )
 {
-    STRLIST r, sl;
+    strlist_t r, sl;
 
     sl = jnlib_xmalloc( sizeof *sl + strlen(string));
     sl->flags = 0;
@@ -93,35 +95,59 @@ append_to_strlist( STRLIST *list, const char *string )
     return sl;
 }
 
-#if 0
-STRLIST
-append_to_strlist2( STRLIST *list, const char *string, int is_utf8 )
+
+#ifdef JNLIB_NEED_UTF8CONV
+strlist_t
+append_to_strlist2( strlist_t *list, const char *string, int is_utf8 )
 {
-    STRLIST sl;
+  strlist_t sl;
+    
+  if( is_utf8 )
+    sl = append_to_strlist( list, string );
+  else
+    {
+      char *p = native_to_utf8 (string);
+      sl = append_to_strlist( list, p );
+      jnlib_free( p );
+    }
+  return sl;
+}
+#endif /* JNLIB_NEED_UTF8CONV */
 
-    if( is_utf8 )
-       sl = append_to_strlist( list, string );
-    else {
-       char *p = native_to_utf8( string );
-       sl = append_to_strlist( list, p );
-       m_free( p );
+
+/* Return a copy of LIST. */
+strlist_t
+strlist_copy (strlist_t list)
+{
+  strlist_t newlist = NULL, sl, *last;
+
+  last = &newlist;
+  for (; list; list = list->next)
+    {
+      sl = jnlib_xmalloc (sizeof *sl + strlen (list->d));
+      sl->flags = list->flags;
+      strcpy(sl->d, list->d);
+      sl->next = NULL;
+      *last = sl;
+      last = &sl;
     }
-    return sl;
+  return newlist;
 }
-#endif
 
-STRLIST
-strlist_prev( STRLIST head, STRLIST node )
+
+
+strlist_t
+strlist_prev( strlist_t head, strlist_t node )
 {
-    STRLIST n;
+    strlist_t n;
 
     for(n=NULL; head && head != node; head = head->next )
        n = head;
     return n;
 }
 
-STRLIST
-strlist_last( STRLIST node )
+strlist_t
+strlist_last( strlist_t node )
 {
     if( node )
        for( ; node->next ; node = node->next )
@@ -130,4 +156,21 @@ strlist_last( STRLIST node )
 }
 
 
+char *
+strlist_pop (strlist_t *list)
+{
+  char *str=NULL;
+  strlist_t sl=*list;
+
+  if(sl)
+    {
+      str=jnlib_xmalloc(strlen(sl->d)+1);
+      strcpy(str,sl->d);
+
+      *list=sl->next;
+      jnlib_free(sl);
+    }
+
+  return str;
+}