primitiveDirectoryCreate(void) { // FilePlugin>>#primitiveDirectoryCreate sqInt dirName; char *dirNameIndex; sqInt dirNameSize; sqInt okToCreate; dirName = stackValue(0); if (!(isBytes(dirName))) { return primitiveFail(); } dirNameIndex = firstIndexableField(dirName); /* If the security plugin can be loaded, use it to check for permission. If not, assume it's ok */ dirNameSize = byteSizeOf(dirName); if (sCCPfn != 0) { okToCreate = ((sqInt (*)(char *, sqInt))sCCPfn)(dirNameIndex, dirNameSize); if (!okToCreate) { return primitiveFail(); } } if (!(dir_Create(dirNameIndex, dirNameSize))) { return primitiveFail(); } pop(1); }
EXPORT(sqInt) primitiveDirectoryCreate(void) { sqInt dirName; char * dirNameIndex; sqInt okToCreate; sqInt dirNameSize; dirName = interpreterProxy->stackValue(0); if (!(interpreterProxy->isBytes(dirName))) { return interpreterProxy->primitiveFail(); } dirNameIndex = interpreterProxy->firstIndexableField(dirName); /* If the security plugin can be loaded, use it to check for permission. If not, assume it's ok */ dirNameSize = interpreterProxy->byteSizeOf(dirName); if (sCCPfn != 0) { okToCreate = ((sqInt (*)(char *, sqInt))sCCPfn)(dirNameIndex, dirNameSize); if (!(okToCreate)) { return interpreterProxy->primitiveFail(); } } if (!(dir_Create(dirNameIndex, dirNameSize))) { return interpreterProxy->primitiveFail(); } interpreterProxy->pop(1); }
file_File * file_OpenStatus(uchar * path, fat_FileSystem * fs, uchar status) { uchar a = 0x00; uchar entry_found = 0; file_File * file; uint16 i, length, j = 0; uint16 c; uchar skip; uchar file_name[SIZE_MAX_LFN]; uint32 cluster_no; cluster_no = fs->cluster_begin_lba; file = (file_File *)efat_malloc(sizeof(file_File)); file->entry = (fat_DirEntry *)efat_malloc(sizeof(fat_DirEntry)); file->status = status; file->entry->attrib |= FAT_ATTR_DIR; //set current file to root directory i = 0; while(entry_found==0) { fopen_get_next_entry: length = util_DirNameCopy(file_name, path + i); if(length == 0) { if(file->entry->attrib & FAT_ATTR_DIR) { //check if directory file_Close(file); return 0; //return null if directory } return file; } i += length; if(file_name[0] != 0) { //eat empty space ex: \\libraries\\.. --> libraries\\.. while((skip = fat_GetDirEntry(j, cluster_no, file->entry, fs)) !=0 ) { j += skip; if(util_DirNameCompare(file_name, file->entry->lfn)) { if(file->entry->attrib & FAT_ATTR_DIR) { cluster_no = fat_GetDataCluster(file->entry->cluster, fs); } else { file->data_cluster = fat_GetDataCluster(file->entry->cluster, fs); if(a & FILE_MODE_APPEND) { file->file_ptr = file->entry->size - 1; } else { file->file_ptr = 0; } (fat_FileSystem *)file->fs = fs; file->status |= FILE_OPENED; //set status file->current_cluster = file->data_cluster; //set current cluster to 1st cluster file->current_offset = 0; return file; //asumsi tidak ada file didalam file ?? } j = 0; goto fopen_get_next_entry; } } if(status & FILE_OPEN_CREATE) { //check if creation allowed if(path[i - 1] == '\\') { //is directory? //use dir create dir_Create(cluster_no, file_name, file->entry, fs); //create directory cluster_no = fat_GetDataCluster(file->entry->cluster, fs); j = 0; goto fopen_get_next_entry; } else { //then file file_Create(cluster_no, file_name, file, fs); file->data_cluster = fat_GetDataCluster(file->entry->cluster, fs); if(a & FILE_MODE_APPEND) { file->file_ptr = file->entry->size - 1; } else { file->file_ptr = 0; } (fat_FileSystem *)file->fs = fs; file->status |= FILE_OPENED; //set status file->current_cluster = file->data_cluster; //set current cluster to 1st cluster file->current_offset = 0; return file; } } //file/directory tidak ditemukan file_Close(file); return 0; } } file_Close(file); return 0; //file not found }