gst-libs/gst/cdda/: Use GLib's base64 implementation instead of our own.
authorSebastian Dröge <slomo@circular-chaos.org>
Thu, 3 Apr 2008 06:39:27 +0000 (06:39 +0000)
committerSebastian Dröge <slomo@circular-chaos.org>
Thu, 3 Apr 2008 06:39:27 +0000 (06:39 +0000)
Original commit message from CVS:
* gst-libs/gst/cdda/Makefile.am:
* gst-libs/gst/cdda/base64.c:
* gst-libs/gst/cdda/base64.h:
* gst-libs/gst/cdda/gstcddabasesrc.c:
(gst_cddabasesrc_calculate_musicbrainz_discid):
Use GLib's base64 implementation instead of our own.

ChangeLog
gst-libs/gst/cdda/Makefile.am
gst-libs/gst/cdda/base64.c [deleted file]
gst-libs/gst/cdda/base64.h [deleted file]
gst-libs/gst/cdda/gstcddabasesrc.c

index 1e9855d..8497333 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2008-04-03  Sebastian Dröge  <slomo@circular-chaos.org>
+
+       * gst-libs/gst/cdda/Makefile.am:
+       * gst-libs/gst/cdda/base64.c:
+       * gst-libs/gst/cdda/base64.h:
+       * gst-libs/gst/cdda/gstcddabasesrc.c:
+       (gst_cddabasesrc_calculate_musicbrainz_discid):
+       Use GLib's base64 implementation instead of our own.
+
 2008-04-02  Wim Taymans  <wim.taymans@collabora.co.uk>
 
        * ext/ogg/gstoggdemux.c: (gst_ogg_demux_activate_chain),
index 0730bfd..f62eb02 100644 (file)
@@ -2,8 +2,6 @@ lib_LTLIBRARIES = libgstcdda-@GST_MAJORMINOR@.la
 
 libgstcdda_@GST_MAJORMINOR@_la_SOURCES = \
        gstcddabasesrc.c \
-       base64.c \
-       base64.h \
        sha1.c \
        sha1.h
 
diff --git a/gst-libs/gst/cdda/base64.c b/gst-libs/gst/cdda/base64.c
deleted file mode 100644 (file)
index e5334a3..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-/* --------------------------------------------------------------------------
-
-   MusicBrainz -- The Internet music metadatabase
-
-   Copyright (C) 2000 Robert Kaye
-   
-   This library 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.
-   
-   This library 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 this library; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-     $Id$
-
-----------------------------------------------------------------------------*/
-/*
- * Program:    RFC-822 routines (originally from SMTP)
- *
- * Author:     Mark Crispin
- *             Networks and Distributed Computing
- *             Computing & Communications
- *             University of Washington
- *             Administration Building, AG-44
- *             Seattle, WA  98195
- *             Internet: MRC@CAC.Washington.EDU
- *
- * Date:       27 July 1988
- * Last Edited:        10 September 1998
- *
- * Sponsorship:        The original version of this work was developed in the
- *             Symbolic Systems Resources Group of the Knowledge Systems
- *             Laboratory at Stanford University in 1987-88, and was funded
- *             by the Biomedical Research Technology Program of the National
- *             Institutes of Health under grant number RR-00785.
- *
- * Original version Copyright 1988 by The Leland Stanford Junior University
- * Copyright 1998 by the University of Washington
- *
- *  Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted, provided
- * that the above copyright notices appear in all copies and that both the
- * above copyright notices and this permission notice appear in supporting
- * documentation, and that the name of the University of Washington or The
- * Leland Stanford Junior University not be used in advertising or publicity
- * pertaining to distribution of the software without specific, written prior
- * permission.  This software is made available "as is", and
- * THE UNIVERSITY OF WASHINGTON AND THE LELAND STANFORD JUNIOR UNIVERSITY
- * DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD TO THIS SOFTWARE,
- * INCLUDING WITHOUT LIMITATION ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE, AND IN NO EVENT SHALL THE UNIVERSITY OF
- * WASHINGTON OR THE LELAND STANFORD JUNIOR UNIVERSITY BE LIABLE FOR ANY
- * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, TORT (INCLUDING NEGLIGENCE) OR STRICT LIABILITY, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- */
-
-#include <ctype.h>
-#include <stdio.h>
-#include <time.h>
-#include <stdlib.h>
-
-#include "base64.h"
-
-/* NOTE: This is not true RFC822 anymore. The use of the characters
-   '/', '+', and '=' is no bueno when the ID will be used as part of a URL.
-   '_', '.', and '-' have been used instead
-*/
-
-/* Convert binary contents to BASE64
- * Accepts: source
- *         length of source
- *         pointer to return destination length
- * Returns: destination as BASE64
- */
-
-unsigned char *
-rfc822_binary (void *src, unsigned long srcl, unsigned long *len)
-{
-  unsigned char *ret, *d;
-  unsigned char *s = (unsigned char *) src;
-  char *v = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._";
-  unsigned long i = ((srcl + 2) / 3) * 4;
-
-  *len = i += 2 * ((i / 60) + 1);
-  d = ret = (unsigned char *) malloc ((size_t)++ i);
-  for (i = 0; srcl; s += 3) {   /* process tuplets */
-    *d++ = v[s[0] >> 2];        /* byte 1: high 6 bits (1) */
-    /* byte 2: low 2 bits (1), high 4 bits (2) */
-    *d++ = v[((s[0] << 4) + (--srcl ? (s[1] >> 4) : 0)) & 0x3f];
-    /* byte 3: low 4 bits (2), high 2 bits (3) */
-    *d++ = srcl ? v[((s[1] << 2) + (--srcl ? (s[2] >> 6) : 0)) & 0x3f] : '-';
-    /* byte 4: low 6 bits (3) */
-    *d++ = srcl ? v[s[2] & 0x3f] : '-';
-    if (srcl)
-      srcl--;                   /* count third character if processed */
-    if ((++i) == 15) {          /* output 60 characters? */
-      i = 0;                    /* restart line break count, insert CRLF */
-      *d++ = '\015';
-      *d++ = '\012';
-    }
-  }
-  *d = '\0';                    /* tie off string */
-
-  return ret;                   /* return the resulting string */
-}
diff --git a/gst-libs/gst/cdda/base64.h b/gst-libs/gst/cdda/base64.h
deleted file mode 100644 (file)
index f124267..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/* --------------------------------------------------------------------------
-
-   MusicBrainz -- The Internet music metadatabase
-
-   Copyright (C) 2000 Robert Kaye
-   
-   This library 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.
-   
-   This library 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 this library; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-     $Id$
-
-----------------------------------------------------------------------------*/
-/*
- * Program:    RFC-822 routines (originally from SMTP)
- *
- * Author:     Mark Crispin
- *             Networks and Distributed Computing
- *             Computing & Communications
- *             University of Washington
- *             Administration Building, AG-44
- *             Seattle, WA  98195
- *             Internet: MRC@CAC.Washington.EDU
- *
- * Date:       27 July 1988
- * Last Edited:        10 September 1998
- *
- * Sponsorship:        The original version of this work was developed in the
- *             Symbolic Systems Resources Group of the Knowledge Systems
- *             Laboratory at Stanford University in 1987-88, and was funded
- *             by the Biomedical Research Technology Program of the National
- *             Institutes of Health under grant number RR-00785.
- *
- * Original version Copyright 1988 by The Leland Stanford Junior University
- * Copyright 1998 by the University of Washington
- *
- *  Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted, provided
- * that the above copyright notices appear in all copies and that both the
- * above copyright notices and this permission notice appear in supporting
- * documentation, and that the name of the University of Washington or The
- * Leland Stanford Junior University not be used in advertising or publicity
- * pertaining to distribution of the software without specific, written prior
- * permission.  This software is made available "as is", and
- * THE UNIVERSITY OF WASHINGTON AND THE LELAND STANFORD JUNIOR UNIVERSITY
- * DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD TO THIS SOFTWARE,
- * INCLUDING WITHOUT LIMITATION ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE, AND IN NO EVENT SHALL THE UNIVERSITY OF
- * WASHINGTON OR THE LELAND STANFORD JUNIOR UNIVERSITY BE LIABLE FOR ANY
- * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, TORT (INCLUDING NEGLIGENCE) OR STRICT LIABILITY, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- */
-
-#ifndef __GST_CDDA_BASE64_H__
-#define __GST_CDDA_BASE64_H__
-
-#define rfc822_binary  __gst_cdda_rfc822_binary
-
-unsigned char *rfc822_binary (void *src,unsigned long srcl,unsigned long *len);
-
-#endif /* __GST_CDDA_BASE64_H__ */
-
index 1fb72ac..e329be8 100644 (file)
@@ -1084,7 +1084,6 @@ cddb_sum (gint n)
   return ret;
 }
 
-#include "base64.h"
 #include "sha1.h"
 
 static void
@@ -1092,7 +1091,8 @@ gst_cddabasesrc_calculate_musicbrainz_discid (GstCddaBaseSrc * src)
 {
   GString *s;
   SHA_INFO sha;
-  guchar digest[20], *ptr;
+  guchar digest[20];
+  gchar *ptr;
   gchar tmp[9];
   gulong i;
   guint leadout_sector;
@@ -1129,13 +1129,26 @@ gst_cddabasesrc_calculate_musicbrainz_discid (GstCddaBaseSrc * src)
   sha_final (digest, &sha);
 
   /* re-encode to base64 */
-  ptr = rfc822_binary (digest, 20, &i);
+  ptr = g_base64_encode (digest, 20);
+  i = strlen (ptr);
 
   g_assert (i < sizeof (src->mb_discid) + 1);
   memcpy (src->mb_discid, ptr, i);
   src->mb_discid[i] = '\0';
   free (ptr);
 
+  /* Replace '/', '+' and '=' by '_', '.' and '-' as specified on
+   * http://musicbrainz.org/doc/DiscIDCalculation
+   */
+  for (ptr = src->mb_discid; *ptr != '\0'; ptr++) {
+    if (*ptr == '/')
+      *ptr = '_';
+    else if (*ptr == '+')
+      *ptr = '.';
+    else if (*ptr == '=')
+      *ptr = '-';
+  }
+
   GST_DEBUG_OBJECT (src, "musicbrainz-discid      = %s", src->mb_discid);
   GST_DEBUG_OBJECT (src, "musicbrainz-discid-full = %s", s->str);