]> git.sven.stormbind.net Git - sven/exfat-utils.git/blobdiff - mkfs/uct.c
New upstream version 1.2.6
[sven/exfat-utils.git] / mkfs / uct.c
index 9038ed9992a1f1f6abe9c13e845e2a29a8e13580..a70e8973636b6a8890d152e60fdd090d2309f656 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-2017  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)
+static int uct_write(struct exfat_dev* dev)
 {
 {
-       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);
+       if (exfat_write(dev, upcase_table, sizeof(upcase_table)) < 0)
+       {
+               exfat_error("failed to write upcase table of %zu bytes",
+                               sizeof(upcase_table));
+               return 1;
+       }
+       return 0;
 }
 
 }
 
-int uct_write(off_t base, int fd)
+const struct fs_object uct =
 {
 {
-       if (write(fd, upcase_table, sizeof(upcase_table)) == -1)
-               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));
-       return 0;
-}
+       .get_alignment = uct_alignment,
+       .get_size = uct_size,
+       .write = uct_write,
+};