Пример #1
0
static int restore_shmem_content(void *addr, struct shmem_info *si)
{
	int fd, fd_pg, ret = 0;

	fd = open_image(CR_FD_SHMEM_PAGEMAP, O_RSTR, si->shmid);
	if (fd < 0) {
		fd_pg = open_image(CR_FD_SHM_PAGES_OLD, O_RSTR, si->shmid);
		if (fd_pg < 0)
			goto err_unmap;
	} else {
		fd_pg = open_pages_image(O_RSTR, fd);
		if (fd_pg < 0)
			goto out_close;
	}

	while (1) {
		unsigned long vaddr;
		unsigned nr_pages;

		if (fd >= 0) {
			PagemapEntry *pe;

			ret = pb_read_one_eof(fd, &pe, PB_PAGEMAP);
			if (ret <= 0)
				break;

			vaddr = (unsigned long)decode_pointer(pe->vaddr);
			nr_pages = pe->nr_pages;

			pagemap_entry__free_unpacked(pe, NULL);
		} else {
			__u64 img_vaddr;

			ret = read_img_eof(fd_pg, &img_vaddr);
			if (ret <= 0)
				break;

			vaddr = (unsigned long)decode_pointer(img_vaddr);
			nr_pages = 1;
		}

		if (vaddr + nr_pages * PAGE_SIZE > si->size)
			break;

		ret = read(fd_pg, addr + vaddr, nr_pages * PAGE_SIZE);
		if (ret != nr_pages * PAGE_SIZE) {
			ret = -1;
			break;
		}

	}

	close_safe(&fd_pg);
	close_safe(&fd);
	return ret;

out_close:
	close_safe(&fd);
err_unmap:
	munmap(addr,  si->size);
	return -1;
}
Пример #2
0
void SpeedDialSuggestionsModel::AddOpenTabs(BOOL items_under_parent_folder /*= FALSE*/, INT32 num_of_item_to_add /*= -1*/)
{
	if (num_of_item_to_add == 0)
		return;

	INT32 open_pages_folder_idx = -1;

	// Add open tabs folder folder
	if (items_under_parent_folder)
	{
		OpString open_pages;
		RETURN_VOID_IF_ERROR(g_languageManager->GetString(Str::S_CURRENTLY_OPEN_PAGES, open_pages));

		OpStringC8 open_pages_image("Open Pages");
		open_pages_folder_idx = AddFolder(open_pages, open_pages_image);
		if (open_pages_folder_idx == -1)
			return;
	}

	// Get the title and url of last accessed open tabs (only from the active browser window)
	OpWorkspace* workspace = NULL;
	if (BrowserDesktopWindow* browser = g_application->GetActiveBrowserDesktopWindow())
		workspace = browser->GetWorkspace();
	
	if (!workspace)
		return;

	INT32 count = 0;
	for (INT32 i = 0; i < workspace->GetDesktopWindowCount() && count < num_of_item_to_add; i++)
	{
		DesktopWindow* window = workspace->GetDesktopWindowFromStack(i);
		if (window && window->GetType() == OpTypedObject::WINDOW_TYPE_DOCUMENT)
		{
			DocumentDesktopWindow* ddw = (DocumentDesktopWindow*)window; 
 
			if (ddw->HasDocument() && !ddw->IsLockedByUser()) 
			{
				OpString title, address; 
				OpStatus::Ignore(title.Set(ddw->GetTitle(FALSE))); 
				OpStatus::Ignore(WindowCommanderProxy::GetMovedToURL(ddw->GetWindowCommander()).GetAttribute(URL::KUniName_Username_Password_NOT_FOR_UI, address));
				
				if (!DocumentView::IsUrlRestrictedForViewFlag(address.CStr(), DocumentView::ALLOW_ADD_TO_SPEED_DIAL))
					continue;

				if (-1 != AddSuggestion(title, address, open_pages_folder_idx))
					count ++;
			}
		}
	}

	if (count == 0 && items_under_parent_folder)
	{
		/*
		Add information on 'no pages currently open' only if 'items_under_parent_folder' is set to TRUE and 
		tab count is 0.
		*/
		OpString no_items_label;
		RETURN_VOID_IF_ERROR(g_languageManager->GetString(Str::S_NO_PAGES_CURRENTLY_OPEN, no_items_label));
		RETURN_VOID_IF_ERROR(AddLabel(no_items_label, open_pages_folder_idx));
	}
}