]> git.sven.stormbind.net Git - sven/exfat-utils.git/blobdiff - mkfs/uct.c
releasing version 1.1.0-2
[sven/exfat-utils.git] / mkfs / uct.c
index 886bd32250f5d47e020ad4bdc8d6ed8f8104d28c..3355b615356d4902caeb4a793401ec1e3dff1775 100644 (file)
@@ -2,11 +2,12 @@
        uct.c (09.11.10)
        Upper Case Table creation code.
 
        uct.c (09.11.10)
        Upper Case Table creation code.
 
-       Copyright (C) 2009, 2010  Andrew Nayenko
+       Free exFAT implementation.
+       Copyright (C) 2011-2014  Andrew Nayenko
 
 
-       This program is free software: you can redistribute it and/or modify
+       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
        it under the terms of the GNU General Public License as published by
-       the Free Software Foundation, either version 3 of the License, or
+       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,
        (at your option) any later version.
 
        This program is distributed in the hope that it will be useful,
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.
 
        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, see <http://www.gnu.org/licenses/>.
+       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 <unistd.h>
-#include <errno.h>
-#include "mkexfat.h"
+#include "uct.h"
 #include "uctc.h"
 
 #include "uctc.h"
 
-off_t uct_alignment(void)
+static off_t uct_alignment(void)
 {
 {
-       return CLUSTER_SIZE(sb);
+       return get_cluster_size();
 }
 
 }
 
-off_t uct_size(void)
+static off_t uct_size(void)
 {
        return sizeof(upcase_table);
 }
 
 {
        return sizeof(upcase_table);
 }
 
-static le32_t uct_checksum(void)
-{
-       size_t i;
-       uint32_t sum = 0;
-
-       for (i = 0; i < sizeof(upcase_table); i++)
-               sum = ((sum << 31) | (sum >> 1)) + upcase_table[i];
-       return cpu_to_le32(sum);
-}
-
-int uct_write(struct exfat_dev* dev, off_t base)
+static int uct_write(struct exfat_dev* dev)
 {
        if (exfat_write(dev, upcase_table, sizeof(upcase_table)) < 0)
 {
        if (exfat_write(dev, upcase_table, sizeof(upcase_table)) < 0)
-               return errno;
-       upcase_entry.checksum = uct_checksum();
-       upcase_entry.start_cluster = cpu_to_le32(OFFSET_TO_CLUSTER(base));
-       upcase_entry.size = cpu_to_le64(sizeof(upcase_table));
+       {
+               exfat_error("failed to write upcase table of %zu bytes",
+                               sizeof(upcase_table));
+               return 1;
+       }
        return 0;
 }
        return 0;
 }
+
+const struct fs_object uct =
+{
+       .get_alignment = uct_alignment,
+       .get_size = uct_size,
+       .write = uct_write,
+};