Re: [Easytag-mailing] adding features to easytag.



Hi Oliver,

Sorry for the long delay, but I was on hollidays the last week, and quite busy this one...

First, thanks for your contribution.
Then I've a question you, as the crc32 value changes with the content and the file size, how do you intend to get the rigth crc32 value of the file (that is to say : a file without tag) when it have tags?

Sincerely,
Jerome


oliver wrote:
Hi,

I was working on adding some features to easytag and emailed jerome about this a week ago. I still haven't receieved a reply so I'm going to ask here.

I wanted to add (among others) crc32 support. My idea was to have the option to set the crc32 into the comment field, if disired.

I added the appropiate option/buttons etc.

Then I took cksfv and extracted the crc32.c and heavly modified it to suit this projects needs. I created a new crc32.c and a crc32.h. I then made a little test.c to see if the newly created object would work. Everything seemd to work fine compiling test as gcc -o test crc32.c test.c and #including "crc32" at the top of test.c.

Then I added the crc32.c and crc32.h files to the easytag0.27.1 source tree. I'm unaware of the workings of autoconf etc and updated the Makefile.am and Makefile.im to atleast create a proper Makefile after the configure. here's the additions.

<snip>
easytag_SOURCES = \
<snip>
 charset.h \
 crc32.c \
 crc32.h \
 easytag.c \
<snip>
am_easytag_OBJECTS = about.$(OBJEXT) ape_tag.$(OBJEXT) bar.$(OBJEXT) \
browser.$(OBJEXT) cddb.$(OBJEXT) charset.$(OBJEXT) \ crc32.$(OBJEXT) easytag.$(OBJEXT) et_core.$(OBJEXT) \
<snip>

I then configured and compiled the program again (without ANY patch that I created applied) and it compiled and linked just fine. Installing was without a problem either but when running the app it just crashed. I did not use any function from the added object, nor did I include the crc32.h header in any file. This seems to be working just fine. The next step was to include the crc32.h in id3_tag.c to use the added function. This also compiled, linked and runned fine.

Next I just called the function, wich results in an easytag that does no longer work. Of course it could be caused by my addition not beeing executed properly, however, makeing a simple test program, it just works fine.

I attached the crc32.c crc32.h and the test.c I used as a test app.
syntax: test <file>
will show the crc32 value of <file>

I modified id3_tag.c as follows:

addeded
#include "crc32.h"

and in
gboolean Id3tag_Read_File_Tag (gchar *filename, File_Tag *FileTag)
+    unsigned long val;

aswell as after the 'fopen'
    if ( (file=fopen(filename,"r"))==NULL )
    {
g_print(_("ERROR while opening file: '%s' (%s).\n\a"),filename,g_strerror(errno));
        return FALSE;
    }
+    crc32(file, &val);
fclose(file); // We close it cause id3lib opens/closes file itself


this allready results in failure. I could try using a gtk unsigned long, but I doubt it would help much as this should simply work.

any help greatly appreciated.

oliver


------------------------------------------------------------------------

#include <stdio.h>
#include <fcntl.h>
#include "crc32.h"

int main(int argc, char *argv[]) {
	FILE *fd;
	unsigned long val;
	printf("Massive crc32 checker\n");
	if (argc == 2) {
		printf("argv: %s\n", argv[1]);
		if ((fd = fopen(argv[1], "rbS")) == NULL) {
			fprintf(stderr, "Error while opening file: '%s'\n", argv[1]);
			return 0;
		} else {
			if (crc32(fd, &val)) {
				fprintf(stderr, "Error while performing crc32\n");
			} else {
				printf("%.8lx\n", val);
			}
			return 1;
		}
	}
	return 0;
}


------------------------------------------------------------------------

/* crc32.h - the crc check algorithm for cksfv modified by oliver for easytag
Copyright (C) 2000 Bryan Call <bc fodder org>
   Copyright (C) 2003 Oliver Schinagl <oliver are-b org>

   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; either version 2 of the License, or
   (at your option) any later version.

   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 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., 675 Mass Ave, Cambridge, MA 02139, USA. */


#define BUFFERSIZE 16384   /* (16k) buffer size for reading from the file */

static const unsigned long crctable[256] = {
  0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
  0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
  0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
  0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
  0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
  0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
  0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
  0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
  0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
  0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
  0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
  0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
  0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
  0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
  0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
  0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
  0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
  0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
  0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
  0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
  0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
  0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
  0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
  0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
  0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
  0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
  0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
  0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
  0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
  0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
  0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
  0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
  0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
  0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
  0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
  0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
  0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
  0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
  0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
  0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
  0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
  0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
  0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
  0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
  0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
  0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
  0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
  0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
  0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
  0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
  0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
  0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
  0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
  0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
  0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
  0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
  0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
  0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
  0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
  0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
  0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
  0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
  0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
  0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
};

int crc32(register FILE *fd, unsigned long *main_val);


------------------------------------------------------------------------

/* crc32.c - the crc check algorithm for cksfv modified by oliver for easytag
Copyright (C) 2000 Bryan Call <bc fodder org>
   Copyright (C) 2003 Oliver Schinagl <oliver are-b org>

   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; either version 2 of the License, or
   (at your option) any later version.

   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 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., 675 Mass Ave, Cambridge, MA 02139, USA. */

#include <stdio.h>
#include "crc32.h"

int crc32(register FILE *fd, unsigned long *main_val)
{
  char                  buf[BUFFERSIZE], *p;
  int                   nr;
  unsigned long         crc = ~0, crc32_total = ~0;
	
  while ((nr = fread(buf, sizeof(char), sizeof(buf), fd)) > 0)
    for (p = buf; nr--; ++p) {
      crc = (crc >> 8) ^ crctable[(crc ^ *p) & 0xff];
      crc32_total = (crc >> 8) ^ crctable[(crc32_total ^ *p) & 0xff];
    }
  if (nr < 0)
    return 1;

  *main_val = ~crc;
  return 0;
}

--
EasyTAG - Tag editor for MP3 and Ogg Vorbis files
http://easytag.sourceforge.net
--
Jerome COUDERC <j couderc ifrance com>







[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]