コード例 #1
0
ファイル: SystemCall.cpp プロジェクト: FFalcon/jbushOS
int open(const char path[], int)
{
	VNode *node;
	int error = FileSystem::WalkPath(path, strlen(path), &node);
	if (error < 0)
		return error;

	FileDescriptor *desc;
	error = node->Open(&desc);
	if (error < 0) {
		node->ReleaseRef();
		return error;
	}

	desc->SetName(path);
	return OpenHandle(desc);
}
コード例 #2
0
ファイル: commands_ns.cpp プロジェクト: veebo/filesystem
void commands_ns::MkFile(FileSystem *fs, int argc, char *argv[], std::ostream& out)
{
	if (argc != 1)
	{
		out << "Неправильное количество параметров"<< std::endl;
		return;
	}
	if (strlen(argv[0]) > 41)
	{
		out << "Введены некорректные данные" << std::endl;
		return;
	};
	char *nt[2];
	nt[0] = strtok(argv[0], ".");
	nt[1] = strtok(NULL, "");
	char *s = strtok(NULL, ".,-!");
	if ((!nt[0]) || (!nt[1]) || (s))
	{
		out << "Введены некорректные данные" << std::endl;
		return;
	}

	if (fs->names_types(nt[0])||fs->names_types(nt[1]))
	{
		out << "Введены некорректные данные" << std::endl;
		return;
	}
	FileDescriptor* fd = new FileDescriptor();
	fd->SetName(nt[0]);
	fd->SetType(nt[1]);
	fd->SetSize(0);
	fd->SetOffset(0);
	fs->CreateFile(fd);

	out << "Файл создан." << std::endl;
	return;
}
コード例 #3
0
ファイル: commands_ns.cpp プロジェクト: veebo/filesystem
void commands_ns::RenFile(FileSystem *fs, int argc, char *argv[], std::ostream& out)
{
	FileIterator* fi = fs->GetIterator();
	int i = 0, count = strlen(argv[0]), flag = 1;
	char *arg_name = new char[count];
	if (argc != 2)
	{
		out << "Неправильное количество параметров" << std::endl;
		delete[] arg_name;
		return;
	}

	while (argv[0][i] != '.')
	{
		arg_name[i] = argv[0][i];
		++i;
		if (i > count - 2)
		{
			out << "Введены некорректные данные" << std::endl;
			delete[] arg_name;
			return;
		}
	}

	if (i == 0)
	{
		out << "Введены некорректные данные" << std::endl;
		delete[] arg_name;
		return;
	}

	arg_name[i] = '\0'; count -= i; ++i;
	char *arg_type = new char[count];
	count = 0;
	while (argv[0][i])
	{
		arg_type[count] = argv[0][i];
		++i;
		++count;
	}

	arg_type[count] = '\0';
	count = 0;

	if (fs->names_types(arg_name) || fs->names_types(arg_type)||fs->names_types(argv[1]))
	{
		out << "Введены некорректные данные" << std::endl;
		delete[] arg_name;
		delete[] arg_type;
		return;
	}

	if (fs->GetFilesCount() != 0)
	{
		while (fi->HasNext())
		{
			fi->Next();
			FileDescriptor* fd = fi->GetFileDescriptor();
			if (strcmpi(fd->GetName(), arg_name) == 0 && strcmpi(fd->GetType(), arg_type) == 0)
			{
				if (strcmp(arg_name,argv[1])==0){
					out << "Изменение имени прошло успешно" << std::endl;
					delete[] arg_name;
 					delete[] arg_type;
					return;
				}
				FileIterator* fi2 = fs->GetIterator();
				while (fi2->HasNext())
				{
					fi2->Next();
					FileDescriptor* fd2 = fi2->GetFileDescriptor();
					if (strcmpi(fd2->GetName(), argv[1]) == 0 && strcmpi(fd2->GetType(), arg_type) == 0)
						{
							out << "Файл с таким именем и типом уже существует" << std::endl;
							delete[] arg_name;
 							delete[] arg_type;
							return;
						}
				}
				flag = 0;
				fd->SetName(argv[1]);
				fi->SetFileDescriptor(fd);
				out << "Изменение имени прошло успешно" << std::endl;
				delete[] arg_name;
 				delete[] arg_type;
				return;
			}
			++count;
		}
	}
	if (flag == 1)
	{
		out << "Файла в системе не обнаружено" << std::endl;
	}

	delete[] arg_name;
 	delete[] arg_type;
}