int mkdir(char * filePath, char * fileName) { unsigned int destinationDirBlockNumber,newDirBlockNumber; directoryBlock destinationDirectory,newDirectory; int z, y, isfile; if (strCmp(filePath, "/") == 1) destinationDirBlockNumber = ROOTBLOCK; else destinationDirBlockNumber = findFileBlockInPath(filePath); if (destinationDirBlockNumber == -1) { printstring("Directory does not exists"); return -1; } filePath = getData(filePath); fileName = getData(fileName); readsector(destinationDirBlockNumber, &destinationDirectory); isfile = IsNewFile(destinationDirectory, fileName); if (isfile == -1) { printstring("Directory already exist\n"); return -1; } newDirBlockNumber = AllocateBlock(); y = 0; while(y < DIRECTORYENTRYCOUNT) { newDirectory.entries[y].fileType = IS_FILE; newDirectory.entries[y].fileBlockStart = 0; newDirectory.entries[y].fileBlockSize = 0; y++; } writesector(newDirBlockNumber, &newDirectory); z = 0; while (z < DIRECTORYENTRYCOUNT) { if (destinationDirectory.entries[z].fileBlockStart == 0) { strcpy(fileName, destinationDirectory.entries[z].fileName); destinationDirectory.entries[z].fileType = IS_DIRECTORY; destinationDirectory.entries[z].fileBlockStart = newDirBlockNumber; destinationDirectory.entries[z].fileBlockSize = 1; break; } z++; } writesector(destinationDirBlockNumber, &destinationDirectory); printstring("Directory "); printstring(fileName); printstring(" Created!\n"); return newDirBlockNumber; }
void mkf(char * path, char* fileName, char acess[], char *data) { int y,isfile; directoryBlock destinationDirectory; fileBlock file; unsigned int newDirBlockNumber, destinationDirBlockNumber; if (strCmp(getData(path), "/") != 1) { destinationDirBlockNumber = findFileBlockInPath(getData(path)); } else { destinationDirBlockNumber = ROOTBLOCK; } if (destinationDirBlockNumber == -1) { printstring("Path cannot be found, creating file failed"); return; } readsector(destinationDirBlockNumber, (char*)&destinationDirectory); isfile = IsNewFile(destinationDirectory, getData(fileName)); if (isfile == -1) { printstring("File already exist\n"); return; } file.size = 0; file.type = IS_FILE; file.data[0] = '\0'; strcpy(getData(fileName), file.fileName); strcpy(getData(acess), file.acessRights); strcpy(getData(data), file.data); newDirBlockNumber = AllocateBlock(); wf(&file, getData(data), newDirBlockNumber); y = 0; while( y < DIRECTORYENTRYCOUNT) { if (destinationDirectory.entries[y].fileBlockStart == 0) { strcpy(destinationDirectory.entries[y].fileName, file.fileName); destinationDirectory.entries[y].fileType = IS_FILE; destinationDirectory.entries[y].fileBlockStart = newDirBlockNumber; destinationDirectory.entries[y].fileBlockSize = file.size; break; } y++; } writesector(destinationDirBlockNumber, (char*)&destinationDirectory); return; }
void CFile::Close() { if (handle!=0) { fclose(handle); if (IsNewFile()) { if (fileSystem->fileExists(filename)) { //delete possible existing destination file fileSystem->removeFile(filename); } fileSystem->Rename(tmpfile, filename); isnewfile = false; } handle=0; } }