210 lines
6.8 KiB
Diff
210 lines
6.8 KiB
Diff
From e18d72f70e30109492e9602ace5560e0c90b4a8b Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= <noltari@gmail.com>
|
|
Date: Sat, 7 Mar 2015 13:23:23 +0100
|
|
Subject: [PATCH 11/14] Remove linux/msdos_fs.h includes
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
|
|
Signed-off-by: Andreas Bombe <aeb@debian.org>
|
|
---
|
|
src/file.c | 7 +------
|
|
src/file.h | 2 ++
|
|
src/fsck.fat.h | 8 ++------
|
|
src/mkfs.fat.c | 32 +++---------------------------
|
|
src/msdos_fs.h | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
5 files changed, 69 insertions(+), 41 deletions(-)
|
|
create mode 100644 src/msdos_fs.h
|
|
|
|
diff --git a/src/file.c b/src/file.c
|
|
index 0b53840..9519070 100644
|
|
--- a/src/file.c
|
|
+++ b/src/file.c
|
|
@@ -30,14 +30,9 @@
|
|
#include <ctype.h>
|
|
#include <unistd.h>
|
|
|
|
-#define _LINUX_STAT_H /* hack to avoid inclusion of <linux/stat.h> */
|
|
-#define _LINUX_STRING_H_ /* hack to avoid inclusion of <linux/string.h> */
|
|
-#define _LINUX_FS_H /* hack to avoid inclusion of <linux/fs.h> */
|
|
-
|
|
-#include <linux/msdos_fs.h>
|
|
-
|
|
#include "common.h"
|
|
#include "file.h"
|
|
+#include "msdos_fs.h"
|
|
#include "charconv.h"
|
|
|
|
FDSC *fp_root = NULL;
|
|
diff --git a/src/file.h b/src/file.h
|
|
index 3adfc96..eaaf356 100644
|
|
--- a/src/file.h
|
|
+++ b/src/file.h
|
|
@@ -23,6 +23,8 @@
|
|
#ifndef _FILE_H
|
|
#define _FILE_H
|
|
|
|
+#include "msdos_fs.h"
|
|
+
|
|
typedef enum { fdt_none, fdt_drop, fdt_undelete } FD_TYPE;
|
|
|
|
typedef struct _fptr {
|
|
diff --git a/src/fsck.fat.h b/src/fsck.fat.h
|
|
index 27e9d52..e5f6178 100644
|
|
--- a/src/fsck.fat.h
|
|
+++ b/src/fsck.fat.h
|
|
@@ -28,16 +28,12 @@
|
|
#define _DOSFSCK_H
|
|
|
|
#include <fcntl.h>
|
|
-#define _LINUX_STAT_H /* hack to avoid inclusion of <linux/stat.h> */
|
|
-#define _LINUX_STRING_H_ /* hack to avoid inclusion of <linux/string.h> */
|
|
-#define _LINUX_FS_H /* hack to avoid inclusion of <linux/fs.h> */
|
|
-
|
|
-#include <linux/msdos_fs.h>
|
|
-
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
#include <endian.h>
|
|
|
|
+#include "msdos_fs.h"
|
|
+
|
|
#define VFAT_LN_ATTR (ATTR_RO | ATTR_HIDDEN | ATTR_SYS | ATTR_VOLUME)
|
|
|
|
#define FAT_STATE_DIRTY 0x01
|
|
diff --git a/src/mkfs.fat.c b/src/mkfs.fat.c
|
|
index 3d1512f..76d40d8 100644
|
|
--- a/src/mkfs.fat.c
|
|
+++ b/src/mkfs.fat.c
|
|
@@ -67,6 +67,8 @@
|
|
#include <stdint.h>
|
|
#include <endian.h>
|
|
|
|
+#include "msdos_fs.h"
|
|
+
|
|
/* In earlier versions, an own llseek() was used, but glibc lseek() is
|
|
* sufficient (or even better :) for 64 bit offsets in the meantime */
|
|
#define llseek lseek
|
|
@@ -99,21 +101,6 @@ static inline int cdiv(int a, int b)
|
|
return (a + b - 1) / b;
|
|
}
|
|
|
|
-/* MS-DOS filesystem structures -- I included them here instead of
|
|
- including linux/msdos_fs.h since that doesn't include some fields we
|
|
- need */
|
|
-
|
|
-#define ATTR_RO 1 /* read-only */
|
|
-#define ATTR_HIDDEN 2 /* hidden */
|
|
-#define ATTR_SYS 4 /* system */
|
|
-#define ATTR_VOLUME 8 /* volume label */
|
|
-#define ATTR_DIR 16 /* directory */
|
|
-#define ATTR_ARCH 32 /* archived */
|
|
-
|
|
-#define ATTR_NONE 0 /* no attribute bits */
|
|
-#define ATTR_UNUSED (ATTR_VOLUME | ATTR_ARCH | ATTR_SYS | ATTR_HIDDEN)
|
|
- /* attribute bits that are copied "as is" */
|
|
-
|
|
/* FAT values */
|
|
#define FAT_EOF (atari_format ? 0x0fffffff : 0x0ffffff8)
|
|
#define FAT_BAD 0x0ffffff7
|
|
@@ -200,19 +187,6 @@ struct fat32_fsinfo {
|
|
uint32_t reserved2[4];
|
|
};
|
|
|
|
-struct msdos_dir_entry {
|
|
- char name[8], ext[3]; /* name and extension */
|
|
- uint8_t attr; /* attribute bits */
|
|
- uint8_t lcase; /* Case for base and extension */
|
|
- uint8_t ctime_ms; /* Creation time, milliseconds */
|
|
- uint16_t ctime; /* Creation time */
|
|
- uint16_t cdate; /* Creation date */
|
|
- uint16_t adate; /* Last access date */
|
|
- uint16_t starthi; /* high 16 bits of first cl. (FAT32) */
|
|
- uint16_t time, date, start; /* time, date and first cluster */
|
|
- uint32_t size; /* file size (in bytes) */
|
|
-} __attribute__ ((packed));
|
|
-
|
|
/* The "boot code" we put into the filesystem... it writes a message and
|
|
tells the user to try again */
|
|
|
|
@@ -1244,7 +1218,7 @@ static void setup_tables(void)
|
|
htole16((unsigned short)(ctime->tm_mday +
|
|
((ctime->tm_mon + 1) << 5) +
|
|
((ctime->tm_year - 80) << 9)));
|
|
- de->ctime_ms = 0;
|
|
+ de->ctime_cs = 0;
|
|
de->ctime = de->time;
|
|
de->cdate = de->date;
|
|
de->adate = de->date;
|
|
diff --git a/src/msdos_fs.h b/src/msdos_fs.h
|
|
new file mode 100644
|
|
index 0000000..54b2a34
|
|
--- /dev/null
|
|
+++ b/src/msdos_fs.h
|
|
@@ -0,0 +1,61 @@
|
|
+/* msdos_fs.h - MS-DOS filesystem constants/structures
|
|
+
|
|
+ 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 3 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, see <http://www.gnu.org/licenses/>.
|
|
+
|
|
+ The complete text of the GNU General Public License
|
|
+ can be found in /usr/share/common-licenses/GPL-3 file.
|
|
+*/
|
|
+
|
|
+#ifndef _MSDOS_FS_H
|
|
+#define _MSDOS_FS_H
|
|
+
|
|
+#include <stdint.h>
|
|
+
|
|
+#define SECTOR_SIZE 512 /* sector size (bytes) */
|
|
+#define MSDOS_DPS (SECTOR_SIZE / sizeof(struct msdos_dir_entry))
|
|
+#define MSDOS_DPS_BITS 4 /* log2(MSDOS_DPS) */
|
|
+#define MSDOS_DIR_BITS 5 /* log2(sizeof(struct msdos_dir_entry)) */
|
|
+
|
|
+#define ATTR_NONE 0 /* no attribute bits */
|
|
+#define ATTR_RO 1 /* read-only */
|
|
+#define ATTR_HIDDEN 2 /* hidden */
|
|
+#define ATTR_SYS 4 /* system */
|
|
+#define ATTR_VOLUME 8 /* volume label */
|
|
+#define ATTR_DIR 16 /* directory */
|
|
+#define ATTR_ARCH 32 /* archived */
|
|
+
|
|
+/* attribute bits that are copied "as is" */
|
|
+#define ATTR_UNUSED (ATTR_VOLUME | ATTR_ARCH | ATTR_SYS | ATTR_HIDDEN)
|
|
+
|
|
+#define DELETED_FLAG 0xe5 /* marks file as deleted when in name[0] */
|
|
+#define IS_FREE(n) (!*(n) || *(n) == DELETED_FLAG)
|
|
+
|
|
+#define MSDOS_NAME 11 /* maximum name length */
|
|
+#define MSDOS_DOT ". " /* ".", padded to MSDOS_NAME chars */
|
|
+#define MSDOS_DOTDOT ".. " /* "..", padded to MSDOS_NAME chars */
|
|
+
|
|
+struct msdos_dir_entry {
|
|
+ uint8_t name[8], ext[3]; /* name and extension */
|
|
+ uint8_t attr; /* attribute bits */
|
|
+ uint8_t lcase; /* Case for base and extension */
|
|
+ uint8_t ctime_cs; /* Creation time, centiseconds (0-199) */
|
|
+ uint16_t ctime; /* Creation time */
|
|
+ uint16_t cdate; /* Creation date */
|
|
+ uint16_t adate; /* Last access date */
|
|
+ uint16_t starthi; /* High 16 bits of cluster in FAT32 */
|
|
+ uint16_t time, date, start; /* time, date and first cluster */
|
|
+ uint32_t size; /* file size (in bytes) */
|
|
+} __attribute__ ((packed));
|
|
+
|
|
+#endif /* _MSDOS_FS_H */
|
|
--
|
|
1.9.1
|
|
|