Skip to content
Snippets Groups Projects
Commit 24a20e39 authored by Fang Lu's avatar Fang Lu
Browse files

osufs - project setup

parent f5701f16
No related branches found
No related tags found
No related merge requests found
xcuserdata/
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 48;
objects = {
/* Begin PBXBuildFile section */
2012336B1FCD4FC400FCBFC8 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 201233691FCD4FC400FCBFC8 /* main.cpp */; };
2012336E1FCD501200FCBFC8 /* osufs.c in Sources */ = {isa = PBXBuildFile; fileRef = 2012336C1FCD501200FCBFC8 /* osufs.c */; };
201233711FCD581200FCBFC8 /* blkio.c in Sources */ = {isa = PBXBuildFile; fileRef = 2012336F1FCD581200FCBFC8 /* blkio.c */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
2012335D1FCD4F4400FCBFC8 /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = /usr/share/man/man1/;
dstSubfolderSpec = 0;
files = (
);
runOnlyForDeploymentPostprocessing = 1;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
2012335F1FCD4F4400FCBFC8 /* osufs */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = osufs; sourceTree = BUILT_PRODUCTS_DIR; };
201233691FCD4FC400FCBFC8 /* main.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = "<group>"; };
2012336C1FCD501200FCBFC8 /* osufs.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = osufs.c; sourceTree = "<group>"; };
2012336D1FCD501200FCBFC8 /* osufs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = osufs.h; sourceTree = "<group>"; };
2012336F1FCD581200FCBFC8 /* blkio.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = blkio.c; sourceTree = "<group>"; };
201233701FCD581200FCBFC8 /* blkio.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = blkio.h; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
2012335C1FCD4F4400FCBFC8 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
201233561FCD4F4300FCBFC8 = {
isa = PBXGroup;
children = (
201233611FCD4F4400FCBFC8 /* osufs */,
201233601FCD4F4400FCBFC8 /* Products */,
);
sourceTree = "<group>";
};
201233601FCD4F4400FCBFC8 /* Products */ = {
isa = PBXGroup;
children = (
2012335F1FCD4F4400FCBFC8 /* osufs */,
);
name = Products;
sourceTree = "<group>";
};
201233611FCD4F4400FCBFC8 /* osufs */ = {
isa = PBXGroup;
children = (
201233691FCD4FC400FCBFC8 /* main.cpp */,
2012336C1FCD501200FCBFC8 /* osufs.c */,
2012336D1FCD501200FCBFC8 /* osufs.h */,
2012336F1FCD581200FCBFC8 /* blkio.c */,
201233701FCD581200FCBFC8 /* blkio.h */,
);
path = osufs;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
2012335E1FCD4F4400FCBFC8 /* osufs */ = {
isa = PBXNativeTarget;
buildConfigurationList = 201233661FCD4F4400FCBFC8 /* Build configuration list for PBXNativeTarget "osufs" */;
buildPhases = (
2012335B1FCD4F4400FCBFC8 /* Sources */,
2012335C1FCD4F4400FCBFC8 /* Frameworks */,
2012335D1FCD4F4400FCBFC8 /* CopyFiles */,
);
buildRules = (
);
dependencies = (
);
name = osufs;
productName = osufs;
productReference = 2012335F1FCD4F4400FCBFC8 /* osufs */;
productType = "com.apple.product-type.tool";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
201233571FCD4F4300FCBFC8 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0910;
ORGANIZATIONNAME = "Fang Lu";
TargetAttributes = {
2012335E1FCD4F4400FCBFC8 = {
CreatedOnToolsVersion = 9.1;
ProvisioningStyle = Automatic;
};
};
};
buildConfigurationList = 2012335A1FCD4F4300FCBFC8 /* Build configuration list for PBXProject "osufs" */;
compatibilityVersion = "Xcode 8.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = 201233561FCD4F4300FCBFC8;
productRefGroup = 201233601FCD4F4400FCBFC8 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
2012335E1FCD4F4400FCBFC8 /* osufs */,
);
};
/* End PBXProject section */
/* Begin PBXSourcesBuildPhase section */
2012335B1FCD4F4400FCBFC8 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
201233711FCD581200FCBFC8 /* blkio.c in Sources */,
2012336E1FCD501200FCBFC8 /* osufs.c in Sources */,
2012336B1FCD4FC400FCBFC8 /* main.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
201233641FCD4F4400FCBFC8 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++98";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "-";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.12;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
};
name = Debug;
};
201233651FCD4F4400FCBFC8 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++98";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "-";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.12;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = macosx;
};
name = Release;
};
201233671FCD4F4400FCBFC8 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_STYLE = Automatic;
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Debug;
};
201233681FCD4F4400FCBFC8 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_STYLE = Automatic;
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
2012335A1FCD4F4300FCBFC8 /* Build configuration list for PBXProject "osufs" */ = {
isa = XCConfigurationList;
buildConfigurations = (
201233641FCD4F4400FCBFC8 /* Debug */,
201233651FCD4F4400FCBFC8 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
201233661FCD4F4400FCBFC8 /* Build configuration list for PBXNativeTarget "osufs" */ = {
isa = XCConfigurationList;
buildConfigurations = (
201233671FCD4F4400FCBFC8 /* Debug */,
201233681FCD4F4400FCBFC8 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 201233571FCD4F4300FCBFC8 /* Project object */;
}
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:osufs.xcodeproj">
</FileRef>
</Workspace>
//
// blkio.c
// osufs
//
// Created by Fang Lu on 11/28/17.
// Copyright © 2017 Fang Lu. All rights reserved.
//
#include "blkio.h"
#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#ifdef _WIN32
#error "Win32 NOT supported"
#elif __APPLE__
#include <sys/disk.h>
uint64_t blkio_size(uint32_t dev) {
uint64_t sector_count = 0;
// Query the number of sectors on the disk
if (ioctl(dev, DKIOCGETBLOCKCOUNT, &sector_count) == -1) {
fprintf(stderr, "Failed to get block count\n");
return 0;
}
fprintf(stderr, "IOCTL: block count is %llu\n", sector_count);
uint32_t sector_size = 0;
// Query the size of each sector
if (ioctl(dev, DKIOCGETBLOCKSIZE, &sector_size) == -1) {
fprintf(stderr, "Failed to get block size\n");
return 0;
}
fprintf(stderr, "IOCTL: block size is %u\n", sector_size);
return sector_count * sector_size;
}
#elif __linux__
#include <linux/fs.h>
uint64_t blkio_size(uint32_t dev) {
uint64_t block_size = 0;
if (ioctl(dev, BLKGETSIZE, &block_size) == -1) {
fprintf(stderr, "Failed to get device size\n");
return 0; // Failed
}
return block_size;
}
#elif __unix__
#error "Platform not supported"
#elif defined(_POSIX_VERSION)
#error "Platform not supported"
#else
#error "Unknown compiler"
#endif
mdev *blkio_open(const char *filename) {
uint32_t fd = open(filename, O_RDWR);
if (fd == -1) {
fprintf(stderr, "Failed to open file %s\n", filename);
fprintf(stderr, "%s (%d)\n", strerror(errno), errno);
return NULL;
}
uint64_t fsize = blkio_size(fd);
printf("File opened (fd=%u). Device size is: %llu\n", fd, fsize);
if (!fsize) {
return NULL;
}
void *base = mmap(NULL, fsize, PROT_READ,
MAP_SHARED|MAP_FILE, fd, 0);
if (base == MAP_FAILED) {
fprintf(stderr, "MMap failed.\n");
fprintf(stderr, "%s (%d)\n", strerror(errno), errno);
return NULL;
}
if (close(fd) == -1) {
fprintf(stderr, "Failed to close file\n");
}
mdev *ret = malloc(sizeof(mdev));
ret->base = base;
ret->len = fsize;
ret->fd = fd;
return ret;
}
void blkio_close(mdev *dev) {
munmap(dev->base, dev->len);
close(dev->fd);
free(dev);
}
//
// blkio.h
// osufs
//
// Created by Fang Lu on 11/28/17.
// Copyright © 2017 Fang Lu. All rights reserved.
//
#ifndef blkio_h
#define blkio_h
#ifdef __cplusplus
extern "C" {
#endif
#include <inttypes.h>
typedef struct mdev_t {
void *base;
uint64_t len;
uint32_t fd;
} mdev;
mdev *blkio_open(const char *filename);
void blkio_close(mdev *dev);
#ifdef __cplusplus
}
#endif
#endif /* blkio_h */
//
// main
// osufs
//
// Created by Fang Lu on 11/28/17.
// Copyright © 2017 Fang Lu. All rights reserved.
//
#include <stdio.h>
#include "blkio.h"
int main(int argc, char *argv[]) {
if (argc != 2) {
fprintf(stderr, "Usage: %s device file\n", argv[0]);
return 1;
}
mdev *dev = blkio_open(argv[1]);
if (!dev) {
fprintf(stderr, "Failed to open device file\n");
return 1;
}
printf("Device capacity is: %llu MiB\n", (dev->len >> 20));
printf("Dumping the first sector...\n");
unsigned char *ptr = (unsigned char *)dev->base;
for (int i=0; i<512; i++) {
printf("%x ", ptr[i]);
if (i&0x7)
printf("\n");
}
blkio_close(dev);
return 0;
}
//
// osufs.c
// osufs
//
// Created by Fang Lu on 11/28/17.
// Copyright © 2017 Fang Lu. All rights reserved.
//
#include "osufs.h"
//
// osufs.h
// osufs
//
// Created by Fang Lu on 11/28/17.
// Copyright © 2017 Fang Lu. All rights reserved.
//
#ifndef osufs_h
#define osufs_h
#ifdef __cplusplus
extern "C" {
#endif
#include <stdio.h>
#ifdef __cplusplus
}
#endif
#endif /* osufs_h */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment