From 36f712b9496a12d86d12aa32dff0d6663fc29f80 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sat, 28 Sep 2013 14:14:13 +0200 Subject: tag/{riff,aiff}: convert to C++ --- src/tag/Aiff.cxx | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/tag/Aiff.hxx | 40 ++++++++++++++++++++ src/tag/Riff.cxx | 98 +++++++++++++++++++++++++++++++++++++++++++++++++ src/tag/Riff.hxx | 40 ++++++++++++++++++++ src/tag/TagId3.cxx | 7 +--- src/tag/aiff.c | 106 ----------------------------------------------------- src/tag/aiff.h | 41 --------------------- src/tag/riff.c | 104 ---------------------------------------------------- src/tag/riff.h | 41 --------------------- 9 files changed, 280 insertions(+), 297 deletions(-) create mode 100644 src/tag/Aiff.cxx create mode 100644 src/tag/Aiff.hxx create mode 100644 src/tag/Riff.cxx create mode 100644 src/tag/Riff.hxx delete mode 100644 src/tag/aiff.c delete mode 100644 src/tag/aiff.h delete mode 100644 src/tag/riff.c delete mode 100644 src/tag/riff.h (limited to 'src/tag') diff --git a/src/tag/Aiff.cxx b/src/tag/Aiff.cxx new file mode 100644 index 000000000..09d107d5b --- /dev/null +++ b/src/tag/Aiff.cxx @@ -0,0 +1,100 @@ +/* + * Copyright (C) 2003-2013 The Music Player Daemon Project + * http://www.musicpd.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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "config.h" /* must be first for large file support */ +#include "Aiff.hxx" + +#include + +#include +#include +#include +#include +#include +#include + +#undef G_LOG_DOMAIN +#define G_LOG_DOMAIN "aiff" + +struct aiff_header { + char id[4]; + uint32_t size; + char format[4]; +}; + +struct aiff_chunk_header { + char id[4]; + uint32_t size; +}; + +size_t +aiff_seek_id3(FILE *file) +{ + /* determine the file size */ + + struct stat st; + if (fstat(fileno(file), &st) < 0) { + g_warning("Failed to stat file descriptor: %s", + g_strerror(errno)); + return 0; + } + + /* seek to the beginning and read the AIFF header */ + + if (fseek(file, 0, SEEK_SET) != 0) { + g_warning("Failed to seek: %s", g_strerror(errno)); + return 0; + } + + aiff_header header; + size_t size = fread(&header, sizeof(header), 1, file); + if (size != 1 || + memcmp(header.id, "FORM", 4) != 0 || + GUINT32_FROM_BE(header.size) > (uint32_t)st.st_size || + (memcmp(header.format, "AIFF", 4) != 0 && + memcmp(header.format, "AIFC", 4) != 0)) + /* not a AIFF file */ + return 0; + + while (true) { + /* read the chunk header */ + + aiff_chunk_header chunk; + size = fread(&chunk, sizeof(chunk), 1, file); + if (size != 1) + return 0; + + size = GUINT32_FROM_BE(chunk.size); + if (size > G_MAXINT32) + /* too dangerous, bail out: possible integer + underflow when casting to off_t */ + return 0; + + if (size % 2 != 0) + /* pad byte */ + ++size; + + if (memcmp(chunk.id, "ID3 ", 4) == 0) + /* found it! */ + return size; + + if (fseek(file, size, SEEK_CUR) != 0) + return 0; + } +} diff --git a/src/tag/Aiff.hxx b/src/tag/Aiff.hxx new file mode 100644 index 000000000..9000be7f8 --- /dev/null +++ b/src/tag/Aiff.hxx @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2003-2013 The Music Player Daemon Project + * http://www.musicpd.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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +/** \file + * + * A parser for the AIFF file format. + */ + +#ifndef MPD_AIFF_HXX +#define MPD_AIFF_HXX + +#include +#include + +/** + * Seeks the AIFF file to the ID3 chunk. + * + * @return the size of the ID3 chunk on success, or 0 if this is not a + * AIFF file or no ID3 chunk was found + */ +size_t +aiff_seek_id3(FILE *file); + +#endif diff --git a/src/tag/Riff.cxx b/src/tag/Riff.cxx new file mode 100644 index 000000000..3d022e661 --- /dev/null +++ b/src/tag/Riff.cxx @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2003-2013 The Music Player Daemon Project + * http://www.musicpd.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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "config.h" /* must be first for large file support */ +#include "Riff.hxx" + +#include + +#include +#include +#include +#include +#include +#include + +#undef G_LOG_DOMAIN +#define G_LOG_DOMAIN "riff" + +struct riff_header { + char id[4]; + uint32_t size; + char format[4]; +}; + +struct riff_chunk_header { + char id[4]; + uint32_t size; +}; + +size_t +riff_seek_id3(FILE *file) +{ + /* determine the file size */ + + struct stat st; + if (fstat(fileno(file), &st) < 0) { + g_warning("Failed to stat file descriptor: %s", + g_strerror(errno)); + return 0; + } + + /* seek to the beginning and read the RIFF header */ + + if (fseek(file, 0, SEEK_SET) != 0) { + g_warning("Failed to seek: %s", g_strerror(errno)); + return 0; + } + + riff_header header; + size_t size = fread(&header, sizeof(header), 1, file); + if (size != 1 || + memcmp(header.id, "RIFF", 4) != 0 || + GUINT32_FROM_LE(header.size) > (uint32_t)st.st_size) + /* not a RIFF file */ + return 0; + + while (true) { + /* read the chunk header */ + + riff_chunk_header chunk; + size = fread(&chunk, sizeof(chunk), 1, file); + if (size != 1) + return 0; + + size = GUINT32_FROM_LE(chunk.size); + if (size > G_MAXINT32) + /* too dangerous, bail out: possible integer + underflow when casting to off_t */ + return 0; + + if (size % 2 != 0) + /* pad byte */ + ++size; + + if (memcmp(chunk.id, "id3 ", 4) == 0) + /* found it! */ + return size; + + if (fseek(file, size, SEEK_CUR) != 0) + return 0; + } +} diff --git a/src/tag/Riff.hxx b/src/tag/Riff.hxx new file mode 100644 index 000000000..fbbdfaaf6 --- /dev/null +++ b/src/tag/Riff.hxx @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2003-2013 The Music Player Daemon Project + * http://www.musicpd.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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +/** \file + * + * A parser for the RIFF file format (e.g. WAV). + */ + +#ifndef MPD_RIFF_HXX +#define MPD_RIFF_HXX + +#include +#include + +/** + * Seeks the RIFF file to the ID3 chunk. + * + * @return the size of the ID3 chunk on success, or 0 if this is not a + * RIFF file or no ID3 chunk was found + */ +size_t +riff_seek_id3(FILE *file); + +#endif diff --git a/src/tag/TagId3.cxx b/src/tag/TagId3.cxx index 0fc1b01db..2a217dc47 100644 --- a/src/tag/TagId3.cxx +++ b/src/tag/TagId3.cxx @@ -25,11 +25,8 @@ #include "TagBuilder.hxx" #include "util/Error.hxx" #include "ConfigGlobal.hxx" - -extern "C" { -#include "riff.h" -#include "aiff.h" -} +#include "Riff.hxx" +#include "Aiff.hxx" #include #include diff --git a/src/tag/aiff.c b/src/tag/aiff.c deleted file mode 100644 index f66f29e2d..000000000 --- a/src/tag/aiff.c +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (C) 2003-2011 The Music Player Daemon Project - * http://www.musicpd.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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include "config.h" /* must be first for large file support */ -#include "aiff.h" - -#include - -#include -#include -#include -#include -#include -#include - -#undef G_LOG_DOMAIN -#define G_LOG_DOMAIN "aiff" - -struct aiff_header { - char id[4]; - uint32_t size; - char format[4]; -}; - -struct aiff_chunk_header { - char id[4]; - uint32_t size; -}; - -size_t -aiff_seek_id3(FILE *file) -{ - int ret; - struct stat st; - struct aiff_header header; - struct aiff_chunk_header chunk; - size_t size; - - /* determine the file size */ - - ret = fstat(fileno(file), &st); - if (ret < 0) { - g_warning("Failed to stat file descriptor: %s", - g_strerror(errno)); - return 0; - } - - /* seek to the beginning and read the AIFF header */ - - ret = fseek(file, 0, SEEK_SET); - if (ret != 0) { - g_warning("Failed to seek: %s", g_strerror(errno)); - return 0; - } - - size = fread(&header, sizeof(header), 1, file); - if (size != 1 || - memcmp(header.id, "FORM", 4) != 0 || - GUINT32_FROM_BE(header.size) > (uint32_t)st.st_size || - (memcmp(header.format, "AIFF", 4) != 0 && - memcmp(header.format, "AIFC", 4) != 0)) - /* not a AIFF file */ - return 0; - - while (true) { - /* read the chunk header */ - - size = fread(&chunk, sizeof(chunk), 1, file); - if (size != 1) - return 0; - - size = GUINT32_FROM_BE(chunk.size); - if (size > G_MAXINT32) - /* too dangerous, bail out: possible integer - underflow when casting to off_t */ - return 0; - - if (size % 2 != 0) - /* pad byte */ - ++size; - - if (memcmp(chunk.id, "ID3 ", 4) == 0) - /* found it! */ - return size; - - ret = fseek(file, size, SEEK_CUR); - if (ret != 0) - return 0; - } -} diff --git a/src/tag/aiff.h b/src/tag/aiff.h deleted file mode 100644 index a0ae2d41a..000000000 --- a/src/tag/aiff.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2003-2011 The Music Player Daemon Project - * http://www.musicpd.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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -/** \file - * - * A parser for the AIFF file format. - */ - -#ifndef MPD_AIFF_H -#define MPD_AIFF_H - -#include -#include -#include - -/** - * Seeks the AIFF file to the ID3 chunk. - * - * @return the size of the ID3 chunk on success, or 0 if this is not a - * AIFF file or no ID3 chunk was found - */ -size_t -aiff_seek_id3(FILE *file); - -#endif diff --git a/src/tag/riff.c b/src/tag/riff.c deleted file mode 100644 index 9ee916971..000000000 --- a/src/tag/riff.c +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (C) 2003-2011 The Music Player Daemon Project - * http://www.musicpd.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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include "config.h" /* must be first for large file support */ -#include "riff.h" - -#include - -#include -#include -#include -#include -#include -#include - -#undef G_LOG_DOMAIN -#define G_LOG_DOMAIN "riff" - -struct riff_header { - char id[4]; - uint32_t size; - char format[4]; -}; - -struct riff_chunk_header { - char id[4]; - uint32_t size; -}; - -size_t -riff_seek_id3(FILE *file) -{ - int ret; - struct stat st; - struct riff_header header; - struct riff_chunk_header chunk; - size_t size; - - /* determine the file size */ - - ret = fstat(fileno(file), &st); - if (ret < 0) { - g_warning("Failed to stat file descriptor: %s", - g_strerror(errno)); - return 0; - } - - /* seek to the beginning and read the RIFF header */ - - ret = fseek(file, 0, SEEK_SET); - if (ret != 0) { - g_warning("Failed to seek: %s", g_strerror(errno)); - return 0; - } - - size = fread(&header, sizeof(header), 1, file); - if (size != 1 || - memcmp(header.id, "RIFF", 4) != 0 || - GUINT32_FROM_LE(header.size) > (uint32_t)st.st_size) - /* not a RIFF file */ - return 0; - - while (true) { - /* read the chunk header */ - - size = fread(&chunk, sizeof(chunk), 1, file); - if (size != 1) - return 0; - - size = GUINT32_FROM_LE(chunk.size); - if (size > G_MAXINT32) - /* too dangerous, bail out: possible integer - underflow when casting to off_t */ - return 0; - - if (size % 2 != 0) - /* pad byte */ - ++size; - - if (memcmp(chunk.id, "id3 ", 4) == 0) - /* found it! */ - return size; - - ret = fseek(file, size, SEEK_CUR); - if (ret != 0) - return 0; - } -} diff --git a/src/tag/riff.h b/src/tag/riff.h deleted file mode 100644 index 7b35e092a..000000000 --- a/src/tag/riff.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2003-2011 The Music Player Daemon Project - * http://www.musicpd.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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -/** \file - * - * A parser for the RIFF file format (e.g. WAV). - */ - -#ifndef MPD_RIFF_H -#define MPD_RIFF_H - -#include -#include -#include - -/** - * Seeks the RIFF file to the ID3 chunk. - * - * @return the size of the ID3 chunk on success, or 0 if this is not a - * RIFF file or no ID3 chunk was found - */ -size_t -riff_seek_id3(FILE *file); - -#endif -- cgit v1.2.3