~ubuntu-branches/debian/jessie/glib2.0/jessie

« back to all changes in this revision

Viewing changes to glib/gbookmarkfile.c

  • Committer: Bazaar Package Importer
  • Author(s): Gustavo Noronha Silva
  • Date: 2009-02-15 13:00:43 UTC
  • mto: (1.4.3 upstream)
  • mto: This revision was merged to the branch mainline in revision 70.
  • Revision ID: james.westby@ubuntu.com-20090215130043-6snh45flhit8oalb
Tags: upstream-2.18.4
ImportĀ upstreamĀ versionĀ 2.18.4

Show diffs side-by-side

added added

removed removed

Lines of Context:
104
104
#define BOOKMARK_NAME_ATTRIBUTE         "name"
105
105
#define BOOKMARK_EXEC_ATTRIBUTE         "exec"
106
106
#define BOOKMARK_COUNT_ATTRIBUTE        "count"
107
 
#define BOOKMARK_TIMESTAMP_ATTRIBUTE    "timestamp"
 
107
#define BOOKMARK_TIMESTAMP_ATTRIBUTE    "timestamp"     /* deprecated by "modified" */
 
108
#define BOOKMARK_MODIFIED_ATTRIBUTE     "modified"
108
109
#define BOOKMARK_HREF_ATTRIBUTE         "href"
109
110
#define BOOKMARK_TYPE_ATTRIBUTE         "type"
110
111
 
227
228
  retval->name = g_strdup (name);
228
229
  retval->exec = NULL;
229
230
  retval->count = 0;
230
 
  retval->stamp = time (NULL);
 
231
  retval->stamp = 0;
231
232
  
232
233
  return retval;
233
234
}
248
249
bookmark_app_info_dump (BookmarkAppInfo *app_info)
249
250
{
250
251
  gchar *retval;
251
 
  gchar *name, *exec;
 
252
  gchar *name, *exec, *modified, *count;
252
253
 
253
254
  g_warn_if_fail (app_info != NULL);
254
255
 
257
258
 
258
259
  name = g_markup_escape_text (app_info->name, -1);
259
260
  exec = g_markup_escape_text (app_info->exec, -1);
260
 
 
261
 
  retval = g_strdup_printf ("          <%s:%s %s=\"%s\" %s=\"%s\" %s=\"%ld\" %s=\"%u\"/>\n",
262
 
                            BOOKMARK_NAMESPACE_NAME,
263
 
                            BOOKMARK_APPLICATION_ELEMENT,
264
 
                            BOOKMARK_NAME_ATTRIBUTE, name,
265
 
                            BOOKMARK_EXEC_ATTRIBUTE, exec,
266
 
                            BOOKMARK_TIMESTAMP_ATTRIBUTE, (time_t) app_info->stamp,
267
 
                            BOOKMARK_COUNT_ATTRIBUTE, app_info->count);
 
261
  modified = timestamp_to_iso8601 (app_info->stamp);
 
262
  count = g_strdup_printf ("%u", app_info->count);
 
263
 
 
264
  retval = g_strconcat ("          "
 
265
                        "<" BOOKMARK_NAMESPACE_NAME ":" BOOKMARK_APPLICATION_ELEMENT
 
266
                        " " BOOKMARK_NAME_ATTRIBUTE "=\"", name, "\""
 
267
                        " " BOOKMARK_EXEC_ATTRIBUTE "=\"", exec, "\""
 
268
                        " " BOOKMARK_MODIFIED_ATTRIBUTE "=\"", modified, "\""
 
269
                        " " BOOKMARK_COUNT_ATTRIBUTE "=\"", count, "\"/>\n",
 
270
                        NULL);
268
271
 
269
272
  g_free (name);
270
273
  g_free (exec);
 
274
  g_free (modified);
 
275
  g_free (count);
271
276
 
272
277
  return retval;
273
278
}
325
330
                      (GFunc) bookmark_app_info_free,
326
331
                      NULL);
327
332
      g_list_free (metadata->applications);
328
 
      
329
 
      g_hash_table_destroy (metadata->apps_by_name);
330
333
    }
331
 
  
 
334
 
 
335
  g_hash_table_destroy (metadata->apps_by_name);
 
336
 
332
337
  g_free (metadata->icon_href);
333
338
  g_free (metadata->icon_mime);
334
339
  
339
344
bookmark_metadata_dump (BookmarkMetadata *metadata)
340
345
{
341
346
  GString *retval;
 
347
  gchar *buffer;
342
348
 
343
349
  if (!metadata->applications)
344
350
    return NULL;
345
351
  
346
 
  retval = g_string_new (NULL);
 
352
  retval = g_string_sized_new (1024);
347
353
  
348
354
  /* metadata container */
349
 
  g_string_append_printf (retval,
350
 
                          "      <%s %s=\"%s\">\n",
351
 
                          XBEL_METADATA_ELEMENT,
352
 
                          XBEL_OWNER_ATTRIBUTE, BOOKMARK_METADATA_OWNER);
353
 
  
 
355
  g_string_append (retval,
 
356
                   "      "
 
357
                   "<" XBEL_METADATA_ELEMENT
 
358
                   " " XBEL_OWNER_ATTRIBUTE "=\"" BOOKMARK_METADATA_OWNER
 
359
                   "\">\n");
 
360
 
354
361
  /* mime type */
355
 
  if (metadata->mime_type)
356
 
    g_string_append_printf (retval,
357
 
                            "        <%s:%s %s=\"%s\"/>\n",
358
 
                            MIME_NAMESPACE_NAME,
359
 
                            MIME_TYPE_ELEMENT,
360
 
                            MIME_TYPE_ATTRIBUTE, metadata->mime_type);
361
 
  
 
362
  if (metadata->mime_type) {
 
363
    buffer = g_strconcat ("        "
 
364
                          "<" MIME_NAMESPACE_NAME ":" MIME_TYPE_ELEMENT " "
 
365
                          MIME_TYPE_ATTRIBUTE "=\"", metadata->mime_type, "\"/>\n",
 
366
                          NULL);    
 
367
    g_string_append (retval, buffer);
 
368
    g_free (buffer);
 
369
  }
 
370
 
362
371
  if (metadata->groups)
363
372
    {
364
373
      GList *l;
365
374
      
366
375
      /* open groups container */
367
 
      g_string_append_printf (retval,
368
 
                              "        <%s:%s>\n",
369
 
                              BOOKMARK_NAMESPACE_NAME,
370
 
                              BOOKMARK_GROUPS_ELEMENT);
 
376
      g_string_append (retval,
 
377
                       "        "
 
378
                       "<" BOOKMARK_NAMESPACE_NAME
 
379
                       ":" BOOKMARK_GROUPS_ELEMENT ">\n");
371
380
      
372
381
      for (l = g_list_last (metadata->groups); l != NULL; l = l->prev)
373
382
        {
374
383
          gchar *group_name;
375
384
 
376
385
          group_name = g_markup_escape_text ((gchar *) l->data, -1);
377
 
          g_string_append_printf (retval,
378
 
                                  "          <%s:%s>%s</%s:%s>\n",
379
 
                                  BOOKMARK_NAMESPACE_NAME,
380
 
                                  BOOKMARK_GROUP_ELEMENT,
381
 
                                  group_name,
382
 
                                  BOOKMARK_NAMESPACE_NAME,
383
 
                                  BOOKMARK_GROUP_ELEMENT);
 
386
          buffer = g_strconcat ("          "
 
387
                                "<" BOOKMARK_NAMESPACE_NAME
 
388
                                ":" BOOKMARK_GROUP_ELEMENT ">",
 
389
                                group_name,
 
390
                                "</" BOOKMARK_NAMESPACE_NAME
 
391
                                ":"  BOOKMARK_GROUP_ELEMENT ">\n", NULL);
 
392
          g_string_append (retval, buffer);
 
393
 
 
394
          g_free (buffer);
384
395
          g_free (group_name);
385
396
        }
386
397
      
387
398
      /* close groups container */
388
 
      g_string_append_printf (retval,
389
 
                              "        </%s:%s>\n",
390
 
                              BOOKMARK_NAMESPACE_NAME,
391
 
                              BOOKMARK_GROUPS_ELEMENT);
 
399
      g_string_append (retval,
 
400
                       "        "
 
401
                       "</" BOOKMARK_NAMESPACE_NAME
 
402
                       ":" BOOKMARK_GROUPS_ELEMENT ">\n");
392
403
    }
393
404
  
394
405
  if (metadata->applications)
396
407
      GList *l;
397
408
      
398
409
      /* open applications container */
399
 
      g_string_append_printf (retval,
400
 
                              "        <%s:%s>\n",
401
 
                              BOOKMARK_NAMESPACE_NAME,
402
 
                              BOOKMARK_APPLICATIONS_ELEMENT);
 
410
      g_string_append (retval,
 
411
                       "        "
 
412
                       "<" BOOKMARK_NAMESPACE_NAME
 
413
                       ":" BOOKMARK_APPLICATIONS_ELEMENT ">\n");
403
414
      
404
415
      for (l = g_list_last (metadata->applications); l != NULL; l = l->prev)
405
416
        {
419
430
        }
420
431
      
421
432
      /* close applications container */
422
 
      g_string_append_printf (retval,
423
 
                              "        </%s:%s>\n",
424
 
                              BOOKMARK_NAMESPACE_NAME,
425
 
                              BOOKMARK_APPLICATIONS_ELEMENT);
 
433
      g_string_append (retval,
 
434
                       "        "
 
435
                       "</" BOOKMARK_NAMESPACE_NAME
 
436
                       ":" BOOKMARK_APPLICATIONS_ELEMENT ">\n");
426
437
    }
427
438
  
428
439
  /* icon */
430
441
    {
431
442
      if (!metadata->icon_mime)
432
443
        metadata->icon_mime = g_strdup ("application/octet-stream");
433
 
      
434
 
      g_string_append_printf (retval,
435
 
                              "       <%s:%s %s=\"%s\" %s=\"%s\"/>\n",
436
 
                              BOOKMARK_NAMESPACE_NAME,
437
 
                              BOOKMARK_ICON_ELEMENT,
438
 
                              BOOKMARK_HREF_ATTRIBUTE, metadata->icon_href,
439
 
                              BOOKMARK_TYPE_ATTRIBUTE, metadata->icon_mime);
 
444
 
 
445
      buffer = g_strconcat ("       "
 
446
                            "<" BOOKMARK_NAMESPACE_NAME
 
447
                            ":" BOOKMARK_ICON_ELEMENT
 
448
                            " " BOOKMARK_HREF_ATTRIBUTE "=\"", metadata->icon_href,
 
449
                            "\" " BOOKMARK_TYPE_ATTRIBUTE "=\"", metadata->icon_mime, "\"/>\n", NULL);
 
450
      g_string_append (retval, buffer);
 
451
 
 
452
      g_free (buffer);
440
453
    }
441
454
  
442
455
  /* private hint */
443
456
  if (metadata->is_private)
444
 
    g_string_append_printf (retval,
445
 
                            "        <%s:%s/>\n",
446
 
                            BOOKMARK_NAMESPACE_NAME,
447
 
                            BOOKMARK_PRIVATE_ELEMENT);
 
457
    g_string_append (retval,
 
458
                     "        "
 
459
                     "<" BOOKMARK_NAMESPACE_NAME
 
460
                     ":" BOOKMARK_PRIVATE_ELEMENT "/>\n");
448
461
  
449
462
  /* close metadata container */
450
 
  g_string_append_printf (retval, "      </%s>\n", XBEL_METADATA_ELEMENT);
 
463
  g_string_append (retval,
 
464
                   "      "
 
465
                   "</" XBEL_METADATA_ELEMENT ">\n");
451
466
                           
452
467
  return g_string_free (retval, FALSE);
453
468
}
501
516
  GString *retval;
502
517
  gchar *added, *visited, *modified;
503
518
  gchar *escaped_uri;
 
519
  gchar *buffer;
504
520
 
505
521
  /* at this point, we must have at least a registered application; if we don't
506
522
   * we don't screw up the bookmark file, and just skip this item
511
527
      return NULL;
512
528
    }
513
529
  
514
 
  retval = g_string_new (NULL);
 
530
  retval = g_string_sized_new (4096);
515
531
  
516
532
  added = timestamp_to_iso8601 (item->added);
517
533
  modified = timestamp_to_iso8601 (item->modified);
518
534
  visited = timestamp_to_iso8601 (item->visited);
519
535
 
520
536
  escaped_uri = g_markup_escape_text (item->uri, -1);
521
 
  
522
 
  g_string_append_printf (retval,
523
 
                          "  <%s %s=\"%s\" %s=\"%s\" %s=\"%s\" %s=\"%s\">\n",
524
 
                          XBEL_BOOKMARK_ELEMENT,
525
 
                          XBEL_HREF_ATTRIBUTE, escaped_uri,
526
 
                          XBEL_ADDED_ATTRIBUTE, added,
527
 
                          XBEL_MODIFIED_ATTRIBUTE, modified,
528
 
                          XBEL_VISITED_ATTRIBUTE, visited);
 
537
 
 
538
  buffer = g_strconcat ("  <"
 
539
                        XBEL_BOOKMARK_ELEMENT
 
540
                        " "
 
541
                        XBEL_HREF_ATTRIBUTE "=\"", escaped_uri, "\" "
 
542
                        XBEL_ADDED_ATTRIBUTE "=\"", added, "\" "
 
543
                        XBEL_MODIFIED_ATTRIBUTE "=\"", modified, "\" "
 
544
                        XBEL_VISITED_ATTRIBUTE "=\"", visited, "\">\n",
 
545
                        NULL);
 
546
 
 
547
  g_string_append (retval, buffer);
 
548
 
529
549
  g_free (escaped_uri);
530
550
  g_free (visited);
531
551
  g_free (modified);
532
552
  g_free (added);
 
553
  g_free (buffer);
533
554
  
534
555
  if (item->title)
535
556
    {
536
557
      gchar *escaped_title;
537
558
      
538
559
      escaped_title = g_markup_escape_text (item->title, -1);
539
 
      g_string_append_printf (retval,
540
 
                              "    <%s>%s</%s>\n",
541
 
                              XBEL_TITLE_ELEMENT,
542
 
                              escaped_title,
543
 
                              XBEL_TITLE_ELEMENT);
 
560
      buffer = g_strconcat ("    "
 
561
                            "<" XBEL_TITLE_ELEMENT ">",
 
562
                            escaped_title,
 
563
                            "</" XBEL_TITLE_ELEMENT ">\n",
 
564
                            NULL);
 
565
      g_string_append (retval, buffer);
 
566
 
544
567
      g_free (escaped_title);
 
568
      g_free (buffer);
545
569
    }
546
570
  
547
571
  if (item->description)
549
573
      gchar *escaped_desc;
550
574
      
551
575
      escaped_desc = g_markup_escape_text (item->description, -1);
552
 
      g_string_append_printf (retval,
553
 
                              "    <%s>%s</%s>\n",
554
 
                              XBEL_DESC_ELEMENT,
555
 
                              escaped_desc,
556
 
                              XBEL_DESC_ELEMENT);
 
576
      buffer = g_strconcat ("    "
 
577
                            "<" XBEL_DESC_ELEMENT ">",
 
578
                            escaped_desc,
 
579
                            "</" XBEL_DESC_ELEMENT ">\n",
 
580
                            NULL);
 
581
      g_string_append (retval, buffer);
 
582
 
557
583
      g_free (escaped_desc);
 
584
      g_free (buffer);
558
585
    }
559
586
  
560
587
  if (item->metadata)
561
588
    {
562
589
      gchar *metadata;
563
590
      
564
 
      /* open info container */
565
 
      g_string_append_printf (retval, "    <%s>\n", XBEL_INFO_ELEMENT);
566
 
      
567
591
      metadata = bookmark_metadata_dump (item->metadata);
568
592
      if (metadata)
569
593
        {
570
 
          retval = g_string_append (retval, metadata);
 
594
          buffer = g_strconcat ("    "
 
595
                                "<" XBEL_INFO_ELEMENT ">\n",
 
596
                                metadata,
 
597
                                "    "
 
598
                                "</" XBEL_INFO_ELEMENT ">\n",
 
599
                                NULL);
 
600
          retval = g_string_append (retval, buffer);
571
601
 
 
602
          g_free (buffer);
572
603
          g_free (metadata);
573
604
        }
574
 
      
575
 
      /* close info container */
576
 
      g_string_append_printf (retval, "    </%s>\n", XBEL_INFO_ELEMENT);
577
605
    }
578
 
  
579
 
  g_string_append_printf (retval, "  </%s>\n", XBEL_BOOKMARK_ELEMENT);
 
606
 
 
607
  g_string_append (retval, "  </" XBEL_BOOKMARK_ELEMENT ">\n");
580
608
  
581
609
  return g_string_free (retval, FALSE);
582
610
}
700
728
        visited = attribute_values[i];
701
729
      else
702
730
        {
 
731
          /* bookmark is defined by the XBEL spec, so we need
 
732
           * to error out if the element has different or
 
733
           * missing attributes
 
734
           */
703
735
          g_set_error (error, G_MARKUP_ERROR,
704
736
                       G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE,
705
737
                       _("Unexpected attribute '%s' for element '%s'"),
734
766
 
735
767
  add_error = NULL;
736
768
  g_bookmark_file_add_item (parse_data->bookmark_file,
737
 
                              item,
738
 
                              &add_error);
 
769
                            item,
 
770
                            &add_error);
739
771
  if (add_error)
740
772
    {
741
773
      bookmark_item_free (item);
755
787
                           const gchar         **attribute_values,
756
788
                           GError              **error)
757
789
{
758
 
  const gchar *name, *exec, *count, *stamp;
 
790
  const gchar *name, *exec, *count, *stamp, *modified;
759
791
  const gchar *attr;
760
792
  gint i;
761
793
  BookmarkItem *item;
764
796
  g_warn_if_fail ((parse_data != NULL) && (parse_data->state == STATE_APPLICATION));
765
797
 
766
798
  i = 0;
767
 
  name = exec = count = stamp = NULL;
 
799
  name = exec = count = stamp = modified = NULL;
768
800
  for (attr = attribute_names[i]; attr != NULL; attr = attribute_names[++i])
769
801
    {
770
802
      if (IS_ATTRIBUTE (attr, BOOKMARK_NAME_ATTRIBUTE))
775
807
        count = attribute_values[i];
776
808
      else if (IS_ATTRIBUTE (attr, BOOKMARK_TIMESTAMP_ATTRIBUTE))
777
809
        stamp = attribute_values[i];
778
 
      else
779
 
        {
780
 
          g_set_error (error, G_MARKUP_ERROR,
781
 
                       G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE,
782
 
                       _("Unexpected attribute '%s' for element '%s'"),
783
 
                       attr,
784
 
                       BOOKMARK_APPLICATION_ELEMENT);
785
 
          return;
786
 
        }        
 
810
      else if (IS_ATTRIBUTE (attr, BOOKMARK_MODIFIED_ATTRIBUTE))
 
811
        modified = attribute_values[i];
787
812
    }
788
813
 
 
814
  /* the "name" and "exec" attributes are mandatory */
789
815
  if (!name)
790
816
    {
791
817
      g_set_error (error, G_MARKUP_ERROR,
827
853
    ai->count = atoi (count);
828
854
  else
829
855
    ai->count = 1;
830
 
  
831
 
  if (stamp)
832
 
    ai->stamp = (time_t) atol (stamp);
 
856
 
 
857
  if (modified)
 
858
    ai->stamp = timestamp_from_iso8601 (modified);
833
859
  else
834
 
    ai->stamp = time (NULL);
 
860
    {
 
861
      /* the timestamp attribute has been deprecated but we still parse
 
862
       * it for backward compatibility
 
863
       */
 
864
      if (stamp)
 
865
        ai->stamp = (time_t) atol (stamp);
 
866
      else
 
867
        ai->stamp = time (NULL);
 
868
    }
835
869
}
836
870
 
837
871
static void
854
888
    {
855
889
      if (IS_ATTRIBUTE (attr, MIME_TYPE_ATTRIBUTE))
856
890
        type = attribute_values[i];
857
 
      else
858
 
        {
859
 
          g_set_error (error, G_MARKUP_ERROR,
860
 
                       G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE,
861
 
                       _("Unexpected attribute '%s' for element '%s'"),
862
 
                       attr,
863
 
                       MIME_TYPE_ELEMENT);
864
 
          return;
865
 
        }        
866
891
    }
867
892
 
868
893
  if (!type)
901
926
        href = attribute_values[i];
902
927
      else if (IS_ATTRIBUTE (attr, BOOKMARK_TYPE_ATTRIBUTE))
903
928
        type = attribute_values[i];
904
 
      else
905
 
        {
906
 
          g_set_error (error, G_MARKUP_ERROR,
907
 
                       G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE,
908
 
                       _("Unexpected attribute '%s' for element '%s'"),
909
 
                       attr,
910
 
                       BOOKMARK_ICON_ELEMENT);
911
 
          return;
912
 
        }        
913
929
    }
914
930
 
 
931
  /* the "href" attribute is mandatory */       
915
932
  if (!href)
916
933
    {
917
934
      g_set_error (error, G_MARKUP_ERROR,
998
1015
                 const gchar *element,
999
1016
                 const gchar  sep)
1000
1017
{
1001
 
  gchar *ns_uri, *ns_name, *s, *resolved;
 
1018
  gchar *ns_uri, *ns_name;
1002
1019
  const gchar *p, *element_name;
1003
1020
  gboolean retval;
1004
1021
 
1017
1034
   * namespace has been set, just do a plain comparison between @full_element
1018
1035
   * and @element.
1019
1036
   */
1020
 
  p = strchr (element_full, ':');
 
1037
  p = g_utf8_strchr (element_full, -1, ':');
1021
1038
  if (p)
1022
1039
    {
1023
1040
      ns_name = g_strndup (element_full, p - element_full);
1037
1054
      
1038
1055
      return (0 == strcmp (element_full, element));
1039
1056
    }
1040
 
  
1041
 
  resolved = g_strdup_printf ("%s%c%s", ns_uri, sep, element_name);
1042
 
  s = g_strdup_printf ("%s%c%s", namespace, sep, element);
1043
 
  retval = (0 == strcmp (resolved, s));
 
1057
 
 
1058
  retval = (0 == strcmp (ns_uri, namespace) &&
 
1059
            0 == strcmp (element_name, element));
1044
1060
  
1045
1061
  g_free (ns_name);
1046
 
  g_free (resolved);
1047
 
  g_free (s);
1048
1062
  
1049
1063
  return retval;
1050
1064
}
1438
1452
                      GError        **error)
1439
1453
{
1440
1454
  GString *retval;
 
1455
  gchar *buffer;
1441
1456
  GList *l;
1442
1457
  
1443
 
  retval = g_string_new (NULL);
1444
 
  
1445
 
  g_string_append_printf (retval,
1446
 
                          "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
1447
 
#if 0
1448
 
                          /* XXX - do we really need the doctype? */
1449
 
                          "<!DOCTYPE %s\n"
1450
 
                          "  PUBLIC \"%s\"\n"
1451
 
                          "         \"%s\">\n"
1452
 
#endif
1453
 
                          "<%s %s=\"%s\"\n"
1454
 
                          "      xmlns:%s=\"%s\"\n"
1455
 
                          "      xmlns:%s=\"%s\"\n>",
1456
 
#if 0
1457
 
                          /* XXX - do we really need the doctype? */
1458
 
                          XBEL_DTD_NICK,
1459
 
                          XBEL_DTD_SYSTEM, XBEL_DTD_URI,
1460
 
#endif
1461
 
                          XBEL_ROOT_ELEMENT,
1462
 
                          XBEL_VERSION_ATTRIBUTE, XBEL_VERSION,
1463
 
                          BOOKMARK_NAMESPACE_NAME, BOOKMARK_NAMESPACE_URI,
1464
 
                          MIME_NAMESPACE_NAME, MIME_NAMESPACE_URI);
 
1458
  retval = g_string_sized_new (4096);
 
1459
 
 
1460
  g_string_append (retval,
 
1461
                   "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
 
1462
#if 0
 
1463
                   /* XXX - do we really need the doctype? */
 
1464
                   "<!DOCTYPE " XBEL_DTD_NICK "\n"
 
1465
                   "  PUBLIC \"" XBEL_DTD_SYSTEM "\"\n"
 
1466
                   "         \"" XBEL_DTD_URI "\">\n"
 
1467
#endif
 
1468
                   "<" XBEL_ROOT_ELEMENT " " XBEL_VERSION_ATTRIBUTE "=\"" XBEL_VERSION "\"\n"
 
1469
                   "      xmlns:" BOOKMARK_NAMESPACE_NAME "=\"" BOOKMARK_NAMESPACE_URI "\"\n"
 
1470
                   "      xmlns:" MIME_NAMESPACE_NAME     "=\"" MIME_NAMESPACE_URI "\"\n>");
1465
1471
  
1466
1472
  if (bookmark->title)
1467
1473
    {
1468
1474
      gchar *escaped_title;
1469
 
      
 
1475
 
1470
1476
      escaped_title = g_markup_escape_text (bookmark->title, -1);
1471
 
      
1472
 
      g_string_append_printf (retval, "  <%s>%s</%s>\n",
1473
 
                              XBEL_TITLE_ELEMENT,
1474
 
                              escaped_title,
1475
 
                              XBEL_TITLE_ELEMENT);
1476
 
      
 
1477
 
 
1478
      buffer = g_strconcat ("  "
 
1479
                            "<" XBEL_TITLE_ELEMENT ">",
 
1480
                            escaped_title,
 
1481
                            "</" XBEL_TITLE_ELEMENT ">\n", NULL);
 
1482
      
 
1483
      g_string_append (retval, buffer);
 
1484
 
 
1485
      g_free (buffer);
1477
1486
      g_free (escaped_title);
1478
1487
    }
1479
1488
  
1480
1489
  if (bookmark->description)
1481
1490
    {
1482
1491
      gchar *escaped_desc;
1483
 
      
 
1492
 
1484
1493
      escaped_desc = g_markup_escape_text (bookmark->description, -1);
1485
 
      
1486
 
      g_string_append_printf (retval, "  <%s>%s</%s>\n",
1487
 
                              XBEL_DESC_ELEMENT,
1488
 
                              escaped_desc,
1489
 
                              XBEL_DESC_ELEMENT);
1490
 
      
 
1494
 
 
1495
      buffer = g_strconcat ("  "
 
1496
                            "<" XBEL_DESC_ELEMENT ">",
 
1497
                            escaped_desc,
 
1498
                            "</" XBEL_DESC_ELEMENT ">\n", NULL);
 
1499
      g_string_append (retval, buffer);
 
1500
 
 
1501
      g_free (buffer);
1491
1502
      g_free (escaped_desc);
1492
1503
    }
1493
1504
  
1495
1506
    goto out;
1496
1507
  else
1497
1508
    retval = g_string_append (retval, "\n");
1498
 
  
 
1509
 
 
1510
  /* the items are stored in reverse order */
1499
1511
  for (l = g_list_last (bookmark->items);
1500
1512
       l != NULL;
1501
1513
       l = l->prev)
1509
1521
      
1510
1522
      retval = g_string_append (retval, item_dump);
1511
1523
      
1512
 
      g_free (item_dump);      
 
1524
      g_free (item_dump);
1513
1525
    }
1514
1526
 
1515
1527
out:
1516
 
  g_string_append_printf (retval, "</%s>", XBEL_ROOT_ELEMENT);
 
1528
  g_string_append (retval, "</" XBEL_ROOT_ELEMENT ">");
1517
1529
  
1518
1530
  if (length)
1519
1531
    *length = retval->len;
1560
1572
GQuark
1561
1573
g_bookmark_file_error_quark (void)
1562
1574
{
1563
 
  return g_quark_from_static_string ("egg-bookmark-file-error-quark");
 
1575
  return g_quark_from_static_string ("g-bookmark-file-error-quark");
1564
1576
}
1565
1577
 
1566
1578
 
1776
1788
 
1777
1789
  if (!path)
1778
1790
    {
1779
 
      g_set_error (error, G_BOOKMARK_FILE_ERROR,
1780
 
                   G_BOOKMARK_FILE_ERROR_FILE_NOT_FOUND,
1781
 
                   _("No valid bookmark file found in data dirs"));
 
1791
      g_set_error_literal (error, G_BOOKMARK_FILE_ERROR,
 
1792
                           G_BOOKMARK_FILE_ERROR_FILE_NOT_FOUND,
 
1793
                           _("No valid bookmark file found in data dirs"));
1782
1794
      
1783
1795
      return NULL;
1784
1796
    }
2085
2097
  
2086
2098
  n_items = g_list_length (bookmark->items); 
2087
2099
  uris = g_new0 (gchar *, n_items + 1);
2088
 
  
 
2100
 
 
2101
  /* the items are stored in reverse order, so we walk the list backward */
2089
2102
  for (l = g_list_last (bookmark->items), i = 0; l != NULL; l = l->prev)
2090
2103
    {
2091
2104
      BookmarkItem *item = (BookmarkItem *) l->data;
3274
3287
  GString *exec;
3275
3288
  gchar ch;
3276
3289
  
3277
 
  exec = g_string_new (NULL);
 
3290
  exec = g_string_sized_new (512);
3278
3291
  while ((ch = *exec_fmt++) != '\0')
3279
3292
   {
3280
3293
     if (ch != '%')
3598
3611
 * @href: the URI of the icon for the bookmark, or %NULL
3599
3612
 * @mime_type: the MIME type of the icon for the bookmark
3600
3613
 *
3601
 
 * Sets the icon for the bookmark for @uri.  If @href is %NULL, unsets
3602
 
 * the currently set icon.
 
3614
 * Sets the icon for the bookmark for @uri. If @href is %NULL, unsets
 
3615
 * the currently set icon. @href can either be a full URL for the icon
 
3616
 * file or the icon name following the Icon Naming specification.
3603
3617
 *
3604
 
 * If no bookmark for @uri is found it is created.
 
3618
 * If no bookmark for @uri is found one is created.
3605
3619
 *
3606
3620
 * Since: 2.12
3607
3621
 */