diff --git a/include/fs.h b/include/fs.h index 2978a7e..a67c516 100644 --- a/include/fs.h +++ b/include/fs.h @@ -15,23 +15,23 @@ one inode equipped with one 512 bytes block class SuperBlock{ public: - SuperBlock(const uchar *directory){ + SuperBlock(const char *directory){ } ~SuperBlock(){ } static u_int64_t getFreeListHead(RawDisk &disk){ - uchar buffer[8] = {0}; + char buffer[8] = {0}; disk.rawdisk_read(0, buffer, sizeof(buffer)); u_int64_t t = 0; for (int j = 0; j < 8; j++) - t = t | (((u_int64_t)buffer[j])<<(8*j)); + t = t | (((u_int64_t)(unsigned char)buffer[j])<<(8*j)); return t; } static void writeFreeListHead(RawDisk &disk, u_int64_t t){ - uchar buffer[8] = {0}; + char buffer[8] = {0}; for (int j = 0; j < 8; j++){ buffer[j] = (t >> (8 * j)) & 0xFF; } @@ -39,16 +39,16 @@ public: } static u_int64_t getFreeINodeHead(RawDisk &disk){ - uchar buffer[8] = {0}; + char buffer[8] = {0}; disk.rawdisk_read(8, buffer, sizeof(buffer)); u_int64_t t = 0; for (int j = 0; j < 8; j++) - t = t | (((u_int64_t)buffer[j])<<(8*j)); + t = t | (((u_int64_t)(unsigned char)buffer[j])<<(8*j)); return t; } static void writeFreeINodeHead(RawDisk &disk, u_int64_t t){ - uchar buffer[8] = {0}; + char buffer[8] = {0}; for (int j = 0; j < 8; j++){ buffer[j] = (t >> (8 * j)) & 0xFF; } @@ -70,22 +70,22 @@ class INode{ u_int64_t block_number; public: - void read_get_byte(u_int64_t &t, int ¤t_pos, uchar *buffer){ + void read_get_byte(u_int64_t &t, int ¤t_pos, char *buffer){ t = 0; for (int j = 0; j < 8; j++) - t = t | (((u_int64_t)buffer[j+current_pos])<<(8*j)); + t = t | (((u_int64_t)(unsigned char)buffer[j+current_pos])<<(8*j)); current_pos += 8; } - static u_int64_t read_byte_at(int current_pos, uchar *buffer){ + static u_int64_t read_byte_at(int current_pos, char *buffer){ u_int64_t t = 0; for (int j = 0; j < 8; j++) - t = t | (((u_int64_t)buffer[j+current_pos])<<(8*j)); + t = t | (((u_int64_t)(unsigned char)buffer[j+current_pos])<<(8*j)); return t; } void inode_construct(u_int64_t blockNumber, RawDisk &disk){ - uchar buffer[SECTOR_SIZE] = {0}; + char buffer[SECTOR_SIZE] = {0}; disk.rawdisk_read(blockNumber*SECTOR_SIZE, buffer, sizeof(buffer)); block_number = blockNumber; int current_pos = 0; @@ -102,7 +102,7 @@ public: read_get_byte(size, current_pos, buffer); } - void write_get_byte(u_int64_t t, int ¤t_pos, uchar *buffer){ + void write_get_byte(u_int64_t t, int ¤t_pos, char *buffer){ for (int j = 0; j < 8; j++){ buffer[j+current_pos] = t & (((u_int64_t)1<<(8))-1); t >>= 8; @@ -110,7 +110,7 @@ public: current_pos += 8; } - static void write_byte_at(u_int64_t t, int current_pos, uchar *buffer){ + static void write_byte_at(u_int64_t t, int current_pos, char *buffer){ for (int j = 0; j < 8; j++){ buffer[j+current_pos] = t & (((u_int64_t)1<<(8))-1); t >>= 8; @@ -118,7 +118,7 @@ public: } void inode_save(RawDisk &disk){ - uchar buffer[SECTOR_SIZE] = {0}; + char buffer[SECTOR_SIZE] = {0}; int current_pos = 0; for (int i = 0; i < 48; i++){ write_get_byte(blocks[i], current_pos, buffer); @@ -141,7 +141,7 @@ public: 2. data block starting position 3. r/w between storage and rawdisk to maintain */ - uchar buffer[IO_BLOCK_SIZE] = {0}; + char buffer[IO_BLOCK_SIZE] = {0}; u_int64_t freeBlockNum = 0; disk.rawdisk_read(freeListHead, buffer, sizeof(buffer)); for (int i = 8; i < 264; i++){ @@ -176,7 +176,7 @@ public: single_i = datablock_allocate_in_list(disk); } bool inSingle = false; - uchar buffer[IO_BLOCK_SIZE] = {0}; + char buffer[IO_BLOCK_SIZE] = {0}; disk.rawdisk_read(single_i, buffer, sizeof(buffer)); for (int i = 0; i < IO_BLOCK_SIZE; i+=8){ u_int64_t addr = read_byte_at(i, buffer); @@ -195,7 +195,7 @@ public: double_i = datablock_allocate_in_list(disk); } bool inDouble = false; - uchar buffer[IO_BLOCK_SIZE] = {0}; + char buffer[IO_BLOCK_SIZE] = {0}; disk.rawdisk_read(double_i, buffer, sizeof(buffer)); for (int i = 0; i < IO_BLOCK_SIZE; i+=8){ u_int64_t addr = read_byte_at(i, buffer); @@ -215,7 +215,7 @@ public: triple_i = datablock_allocate_in_list(disk); } bool inTriple = false; - uchar buffer[IO_BLOCK_SIZE] = {0}; + char buffer[IO_BLOCK_SIZE] = {0}; disk.rawdisk_read(triple_i, buffer, sizeof(buffer)); for (int i = 0; i < IO_BLOCK_SIZE; i+=8){ u_int64_t addr = read_byte_at(i, buffer); @@ -265,7 +265,7 @@ public: u_int64_t freeBlockHead = ((freeBlockNum/SECTOR_SIZE-MAX_INODE)/(8*2048)*(8*2048)+MAX_INODE)*SECTOR_SIZE; // mark it alive in its bitmap - uchar buffer[IO_BLOCK_SIZE] = {0}; + char buffer[IO_BLOCK_SIZE] = {0}; bool notEmpty = false; disk.rawdisk_read(freeBlockHead, buffer, sizeof(buffer)); for (int i = 8; i < 264; i++){ @@ -290,7 +290,7 @@ public: return 0; } u_int64_t freeBlockNum = 0; - uchar buffer[IO_BLOCK_SIZE] = {0}; + char buffer[IO_BLOCK_SIZE] = {0}; int delpoint = -1; disk.rawdisk_read(single_i, buffer, sizeof(buffer)); for (int i=4088; i >= 0; i--){ @@ -317,7 +317,7 @@ public: return false; } u_int64_t freeBlockNum = 0; - uchar buffer[IO_BLOCK_SIZE] = {0}; + char buffer[IO_BLOCK_SIZE] = {0}; int delpoint = -1; disk.rawdisk_read(double_i, buffer, sizeof(buffer)); for (int i=4088; i >= 0; i-=8){ @@ -344,7 +344,7 @@ public: return false; } u_int64_t freeBlockNum = 0; - uchar buffer[IO_BLOCK_SIZE] = {0}; + char buffer[IO_BLOCK_SIZE] = {0}; int delpoint = -1; disk.rawdisk_read(triple_i, buffer, sizeof(buffer)); for (int i=4088; i >= 0; i-=8){ @@ -402,7 +402,7 @@ public: // initialize Inode list head SuperBlock::writeFreeINodeHead(disk, 1); for (u_int64_t i = 1; i < MAX_INODE; i++){ - uchar buffer[SECTOR_SIZE] = {0}; + char buffer[SECTOR_SIZE] = {0}; u_int64_t t = i + 1; if (t < MAX_INODE){ for (int j = 0; j < 8; j++){ @@ -414,7 +414,7 @@ public: SuperBlock::writeFreeListHead(disk, MAX_INODE*SECTOR_SIZE); // maximum inode number 2^19 0x80000 //Have tested this initialize function but MAX_BLOCK too much, MAX_INODE*2 works for (u_int64_t i = MAX_INODE; i < MAX_BLOCKNUM-4096; i += 2048*8){ - uchar buffer[IO_BLOCK_SIZE] = {0}; + char buffer[IO_BLOCK_SIZE] = {0}; u_int64_t t = (i + 2048*8)*SECTOR_SIZE; //t is address, storing in to buffer for (int j = 0; j < 8; j++){ @@ -428,7 +428,7 @@ public: // the i-th inode is in the i-th block u_int64_t inode_allocate(RawDisk &disk){ u_int64_t freeINodeHead = SuperBlock::getFreeINodeHead(disk); - uchar buffer[SECTOR_SIZE] = {0}; + char buffer[SECTOR_SIZE] = {0}; disk.rawdisk_read(freeINodeHead*SECTOR_SIZE, buffer, sizeof(buffer)); u_int64_t newINodeHead = INode::read_byte_at(0, buffer); // deal with no more INode @@ -442,7 +442,7 @@ public: // free the inode and add it to the free inode list head void inode_free(RawDisk &disk, u_int64_t INodeNumber){ u_int64_t freeINodeHead = SuperBlock::getFreeINodeHead(disk); - uchar buffer[SECTOR_SIZE] = {0}; + char buffer[SECTOR_SIZE] = {0}; INode::write_byte_at(freeINodeHead, 0, buffer); disk.rawdisk_write(INodeNumber*SECTOR_SIZE, buffer, sizeof(buffer)); SuperBlock::writeFreeINodeHead(disk, INodeNumber); diff --git a/include/rawdisk.h b/include/rawdisk.h index 73e3fb3..4cccf70 100644 --- a/include/rawdisk.h +++ b/include/rawdisk.h @@ -6,17 +6,15 @@ #include #include -typedef unsigned char uchar; - class RawDisk{ int fd; - const uchar* dir; + const char* dir; u_int64_t numSectors; u_int64_t diskSize; public: - RawDisk(const uchar *directory) : fd(-1), dir(nullptr), numSectors(0), diskSize(0) { + RawDisk(const char *directory) : fd(-1), dir(nullptr), numSectors(0), diskSize(0) { dir = directory; /*dir = strdup("/dev/vdc"); numSectors = 62914560; @@ -50,7 +48,7 @@ public: } } - int rawdisk_read(u_int64_t offset, uchar *buffer, size_t length) { + int rawdisk_read(u_int64_t offset, char *buffer, size_t length) { if (lseek(fd, offset, SEEK_SET) == (u_int64_t)-1) { perror("Error seeking to offset"); return -1; @@ -66,7 +64,7 @@ public: } // Write a specified number of bytes at a given byte offset - int rawdisk_write(u_int64_t offset, uchar *buffer, size_t length) { + int rawdisk_write(u_int64_t offset, char *buffer, size_t length) { if (lseek(fd, offset, SEEK_SET) == (u_int64_t)-1) { perror("Error seeking to offset"); return -1; diff --git a/lib/main.cpp b/lib/main.cpp index c236c12..396b885 100644 --- a/lib/main.cpp +++ b/lib/main.cpp @@ -4,7 +4,7 @@ int main(){ fischl *F = new fischl; F->init(); - uchar *d = strdup("/dev/vdc"); + char *d = strdup("/dev/vdc"); RawDisk *H = new RawDisk(d); return 0; } \ No newline at end of file diff --git a/test/layer0.cpp b/test/layer0.cpp index 3629ed8..8cc358a 100644 --- a/test/layer0.cpp +++ b/test/layer0.cpp @@ -3,13 +3,13 @@ #include #include "rawdisk.h" -int main(int argc, uchar *argv[]) { - const uchar* d = (argc < 2) ? "/dev/vdc" : argv[1]; +int main(int argc, char *argv[]) { + const char* d = (argc < 2) ? "/dev/vdc" : argv[1]; RawDisk *H = new RawDisk(d); - uchar *buf = "iloveosdfjlseirfnerig"; - uchar readBuffer[512] = {0}; // Initialize to zeros + char *buf = "iloveosdfjlseirfnerig"; + char readBuffer[512] = {0}; // Initialize to zeros //printf("dir %s, numSectors %lld, diskSize %lld \n", H->dir, H->numSectors, H->diskSize); diff --git a/test/layer1_API.cpp b/test/layer1_API.cpp index eb8b7e4..91ef4ef 100644 --- a/test/layer1_API.cpp +++ b/test/layer1_API.cpp @@ -4,27 +4,27 @@ #include "fs.h" #include -int main(int argc, uchar *argv[]) { - const uchar* d = (argc < 2) ? "/dev/vdc" : argv[1]; +int main(int argc, char *argv[]) { + const char* d = (argc < 2) ? "/dev/vdc" : argv[1]; RawDisk *H = new RawDisk(d); printf("test inode\n"); INodeOperation inop; inop.initialize(*H); - uchar buffer[8] = {0}; + char buffer[8] = {0}; //test the begining of inode 1~524287 H->rawdisk_read((1) * SECTOR_SIZE, buffer, sizeof(buffer)); u_int64_t t = 0; for (int j = 0; j < 8; j++) - t |= ((u_int64_t)(uchar)buffer[j]) << (8 * j); + t |= ((u_int64_t)(unsigned char)buffer[j]) << (8 * j); assert(t == 2); //test the number before end of inode 524286 H->rawdisk_read((MAX_INODE - 2) * SECTOR_SIZE, buffer, sizeof(buffer)); t = 0; for (int j = 0; j < 8; j++) - t |= ((u_int64_t)(uchar)buffer[j]) << (8 * j); + t |= ((u_int64_t)(unsigned char)buffer[j]) << (8 * j); fprintf(stderr,"[t %llu,%d]\n",t,__LINE__); assert(t == MAX_INODE - 1); @@ -32,21 +32,21 @@ int main(int argc, uchar *argv[]) { H->rawdisk_read((MAX_INODE - 1) * SECTOR_SIZE, buffer, sizeof(buffer)); t = 0; for (int j = 0; j < 8; j++) - t |= ((u_int64_t)(uchar)buffer[j]) << (8 * j); + t |= ((u_int64_t)(unsigned char)buffer[j]) << (8 * j); assert(t == 0); //test the begining of datablock H->rawdisk_read((MAX_INODE) * SECTOR_SIZE, buffer, sizeof(buffer)); t = 0; for (int j = 0; j < 8; j++) - t |= ((u_int64_t)(uchar)buffer[j]) << (8 * j); + t |= ((u_int64_t)(unsigned char)buffer[j]) << (8 * j); assert(t == (MAX_INODE+2048*8)*SECTOR_SIZE); //test the end of the datablock H->rawdisk_read((MAX_BLOCKNUM - 2048*8) * SECTOR_SIZE, buffer, sizeof(buffer)); t = 0; for (int j = 0; j < 8; j++) - t |= ((u_int64_t)(uchar)buffer[j]) << (8 * j); + t |= ((u_int64_t)(char)buffer[j]) << (8 * j); assert(t == (MAX_BLOCKNUM)*SECTOR_SIZE); //initialize