All pastes #165872 Raw Edit

Miscellany

public cpp v1 · immutable
·published 2006-09-10 08:32 UTC
rendered paste body
? build? linuxdcppIndex: client/HashManager.cpp===================================================================RCS file: /cvsroot/linuxdcpp/linuxdcpp/client/HashManager.cpp,vretrieving revision 1.8diff -u -r1.8 HashManager.cpp--- client/HashManager.cpp	23 Jun 2006 19:51:48 -0000	1.8+++ client/HashManager.cpp	9 Sep 2006 22:58:50 -0000@@ -27,6 +27,10 @@ #include "ZUtils.h" #include "SFVReader.h" +#ifndef _WIN32+#include <sys/mman.h> // mmap, munmap, madvise+#endif+ #define HASH_FILE_VERSION_STRING "2" static const u_int32_t HASH_FILE_VERSION=2; const int64_t HashManager::MIN_BLOCK_SIZE = 64*1024;@@ -438,9 +442,9 @@ 	} } +#ifdef _WIN32 #define BUF_SIZE (256*1024) -#ifdef _WIN32 bool HashManager::Hasher::fastHash(const string& fname, u_int8_t* buf, TigerTree& tth, int64_t size, CRC32Filter* xcrc32) { 	HANDLE h = INVALID_HANDLE_VALUE; 	DWORD x, y;@@ -545,7 +549,59 @@ 	::CloseHandle(h); 	return ok; }-#endif++#else // _WIN32++static const int64_t BUF_SIZE = 0x1000000 - (0x1000000 % getpagesize());++bool HashManager::Hasher::fastHash(const string& filename, u_int8_t* , TigerTree& tth, int64_t size, CRC32Filter* xcrc32) {+       int fd = open(filename.c_str(), O_RDONLY | O_LARGEFILE);+       if(fd == -1)+              return false;++       int64_t size_left = size;+       int64_t pos = 0;+       int64_t size_read = 0;+       void *buf = 0;++       u_int32_t lastRead = GET_TICK();+       while(pos < size) {+              size_read = std::min(size_left, BUF_SIZE);+              buf = mmap(0, size_read, PROT_READ, MAP_SHARED, fd, pos);+              if(buf == MAP_FAILED) {+                     close(fd);+                     return false;+              }++              madvise(buf, size_read, MADV_SEQUENTIAL | MADV_WILLNEED);++              if(SETTING(MAX_HASH_SPEED) > 0) {+                     u_int32_t now = GET_TICK();+                     u_int32_t minTime = size_read * 1000LL / (SETTING(MAX_HASH_SPEED) * 1024LL * 1024LL);+                     if(lastRead + minTime > now) {+                            u_int32_t diff = now - lastRead;+                            Thread::sleep(minTime - diff);+                     } +                     lastRead = lastRead + minTime;+              } else {+                     lastRead = GET_TICK();+              }++              tth.update(buf, size_read);+              if(xcrc32)+                     (*xcrc32)(buf, size_read);+              munmap(buf, size_read);+          		{+          			Lock l(cs);+          			currentSize = max(currentSize - size_read, _LL(0));+          		}+              pos += size_read;+              size_left -= size_read;+       }+       return true;+}++#endif // _WIN32  int HashManager::Hasher::run() { 	setThreadPriority(Thread::IDLE);@@ -607,13 +663,15 @@ 					xcrc32 = &crc32;  				size_t n = 0;-#ifdef _WIN32 				TigerTree fastTTH(bs); 				tth = &fastTTH;+#ifdef _WIN32 				if(!virtualBuf || !fastHash(fname, buf, fastTTH, size, xcrc32)) {+#else+        if(!BOOLSETTING(FAST_HASHING) || !fastHash(fname, 0, fastTTH, size, xcrc32)) {+#endif				   					tth = &slowTTH; 					crc32 = CRC32Filter();-#endif 					u_int32_t lastRead = GET_TICK();  					do {@@ -638,11 +696,9 @@ 						} 						sizeLeft -= n; 					} while (n > 0 && !stop);-#ifdef _WIN32 				} else { 					sizeLeft = 0; 				}-#endif 				f.close(); 				tth->finalize(); 				u_int32_t end = GET_TICK();Index: client/HashManager.h===================================================================RCS file: /cvsroot/linuxdcpp/linuxdcpp/client/HashManager.h,vretrieving revision 1.5diff -u -r1.5 HashManager.h--- client/HashManager.h	15 Jun 2006 18:30:50 -0000	1.5+++ client/HashManager.h	9 Sep 2006 22:58:51 -0000@@ -139,9 +139,7 @@ 		}  		virtual int run();-#ifdef _WIN32 		bool fastHash(const string& fname, u_int8_t* buf, TigerTree& tth, int64_t size, CRC32Filter* xcrc32);-#endif 		void getStats(string& curFile, int64_t& bytesLeft, size_t& filesLeft) { 			Lock l(cs); 			curFile = currentFile;Index: client/SettingsManager.cpp===================================================================RCS file: /cvsroot/linuxdcpp/linuxdcpp/client/SettingsManager.cpp,vretrieving revision 1.5diff -u -r1.5 SettingsManager.cpp--- client/SettingsManager.cpp	15 Jun 2006 18:30:50 -0000	1.5+++ client/SettingsManager.cpp	9 Sep 2006 22:58:51 -0000@@ -73,7 +73,7 @@ 	"NoIpOverride", "SearchOnlyFreeSlots", "LastSearchType", "BoldFinishedDownloads", "BoldFinishedUploads", "BoldQueue",  	"BoldHub", "BoldPm", "BoldSearch", "SocketInBuffer", "SocketOutBuffer", "OnlyDlTthFiles",  	"OpenWaitingUsers", "BoldWaitingUsers", "OpenSystemLog", "BoldSystemLog", "AutoRefreshTime",-	"UseSsl", "AutoSearchLimit", "AltSortOrder", "AutoKickNoFavs", "PromptPassword",+	"UseSsl", "AutoSearchLimit", "AltSortOrder", "AutoKickNoFavs", "PromptPassword", "FastHashing", 	"SENTRY", 	// Int64 	"TotalUpload", "TotalDownload",@@ -257,6 +257,7 @@ 	setDefault(ALT_SORT_ORDER, false); 	setDefault(AUTO_KICK_NO_FAVS, false); 	setDefault(PROMPT_PASSWORD, false);+	setDefault(FAST_HASHING, true);  #ifdef _WIN32 	setDefault(MAIN_WINDOW_STATE, SW_SHOWNORMAL);Index: client/SettingsManager.h===================================================================RCS file: /cvsroot/linuxdcpp/linuxdcpp/client/SettingsManager.h,vretrieving revision 1.5diff -u -r1.5 SettingsManager.h--- client/SettingsManager.h	15 Jun 2006 18:30:50 -0000	1.5+++ client/SettingsManager.h	9 Sep 2006 22:58:51 -0000@@ -89,7 +89,7 @@ 		NO_IP_OVERRIDE, SEARCH_ONLY_FREE_SLOTS, LAST_SEARCH_TYPE, BOLD_FINISHED_DOWNLOADS, BOLD_FINISHED_UPLOADS, BOLD_QUEUE,  		BOLD_HUB, BOLD_PM, BOLD_SEARCH, SOCKET_IN_BUFFER, SOCKET_OUT_BUFFER, ONLY_DL_TTH_FILES, 		OPEN_WAITING_USERS, BOLD_WAITING_USERS, OPEN_SYSTEM_LOG, BOLD_SYSTEM_LOG, AUTO_REFRESH_TIME, -		USE_SSL, AUTO_SEARCH_LIMIT, ALT_SORT_ORDER, AUTO_KICK_NO_FAVS, PROMPT_PASSWORD,+		USE_SSL, AUTO_SEARCH_LIMIT, ALT_SORT_ORDER, AUTO_KICK_NO_FAVS, PROMPT_PASSWORD, FAST_HASHING, 		INT_LAST };  	enum Int64Setting { INT64_FIRST = INT_LAST + 1,Index: glade/settingsdialog.glade===================================================================RCS file: /cvsroot/linuxdcpp/linuxdcpp/glade/settingsdialog.glade,vretrieving revision 1.17diff -u -r1.17 settingsdialog.glade--- glade/settingsdialog.glade	1 Sep 2006 15:05:56 -0000	1.17+++ glade/settingsdialog.glade	9 Sep 2006 22:58:51 -0000@@ -5052,6 +5052,31 @@ 			      <property name="fill">False</property> 			    </packing> 			  </child>++			  <child>+			    <widget class="GtkLabel" id="label217">+			      <property name="visible">True</property>+			      <property name="label" translatable="yes"></property>+			      <property name="use_underline">False</property>+			      <property name="use_markup">False</property>+			      <property name="justify">GTK_JUSTIFY_LEFT</property>+			      <property name="wrap">False</property>+			      <property name="selectable">False</property>+			      <property name="xalign">0.5</property>+			      <property name="yalign">0.5</property>+			      <property name="xpad">0</property>+			      <property name="ypad">0</property>+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>+			      <property name="width_chars">-1</property>+			      <property name="single_line_mode">False</property>+			      <property name="angle">0</property>+			    </widget>+			    <packing>+			      <property name="padding">0</property>+			      <property name="expand">False</property>+			      <property name="fill">False</property>+			    </packing>+			  </child> 			</widget> 			<packing> 			  <property name="padding">0</property>@@ -5198,6 +5223,25 @@ 			      <property name="fill">False</property> 			    </packing> 			  </child>++			  <child>+			    <widget class="GtkCheckButton" id="fastHashingCheckButton">+			      <property name="visible">True</property>+			      <property name="can_focus">True</property>+			      <property name="label" translatable="yes">fast hashing</property>+			      <property name="use_underline">True</property>+			      <property name="relief">GTK_RELIEF_NORMAL</property>+			      <property name="focus_on_click">True</property>+			      <property name="active">True</property>+			      <property name="inconsistent">False</property>+			      <property name="draw_indicator">True</property>+			    </widget>+			    <packing>+			      <property name="padding">0</property>+			      <property name="expand">False</property>+			      <property name="fill">False</property>+			    </packing>+			  </child> 			</widget> 			<packing> 			  <property name="padding">0</property>@@ -5386,6 +5430,31 @@ 			      <property name="fill">False</property> 			    </packing> 			  </child>++			  <child>+			    <widget class="GtkLabel" id="label218">+			      <property name="visible">True</property>+			      <property name="label" translatable="yes"></property>+			      <property name="use_underline">False</property>+			      <property name="use_markup">False</property>+			      <property name="justify">GTK_JUSTIFY_LEFT</property>+			      <property name="wrap">False</property>+			      <property name="selectable">False</property>+			      <property name="xalign">0.5</property>+			      <property name="yalign">0.5</property>+			      <property name="xpad">0</property>+			      <property name="ypad">0</property>+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>+			      <property name="width_chars">-1</property>+			      <property name="single_line_mode">False</property>+			      <property name="angle">0</property>+			    </widget>+			    <packing>+			      <property name="padding">0</property>+			      <property name="expand">False</property>+			      <property name="fill">False</property>+			    </packing>+			  </child> 			</widget> 			<packing> 			  <property name="padding">0</property>@@ -5574,6 +5643,31 @@ 			      <property name="fill">False</property> 			    </packing> 			  </child>++			  <child>+			    <widget class="GtkLabel" id="label219">+			      <property name="visible">True</property>+			      <property name="label" translatable="yes"></property>+			      <property name="use_underline">False</property>+			      <property name="use_markup">False</property>+			      <property name="justify">GTK_JUSTIFY_LEFT</property>+			      <property name="wrap">False</property>+			      <property name="selectable">False</property>+			      <property name="xalign">0.5</property>+			      <property name="yalign">0.5</property>+			      <property name="xpad">0</property>+			      <property name="ypad">0</property>+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>+			      <property name="width_chars">-1</property>+			      <property name="single_line_mode">False</property>+			      <property name="angle">0</property>+			    </widget>+			    <packing>+			      <property name="padding">0</property>+			      <property name="expand">False</property>+			      <property name="fill">False</property>+			    </packing>+			  </child> 			</widget> 			<packing> 			  <property name="padding">0</property>@@ -5720,6 +5814,31 @@ 			      <property name="fill">False</property> 			    </packing> 			  </child>++			  <child>+			    <widget class="GtkLabel" id="label220">+			      <property name="visible">True</property>+			      <property name="label" translatable="yes"></property>+			      <property name="use_underline">False</property>+			      <property name="use_markup">False</property>+			      <property name="justify">GTK_JUSTIFY_LEFT</property>+			      <property name="wrap">False</property>+			      <property name="selectable">False</property>+			      <property name="xalign">0.5</property>+			      <property name="yalign">0.5</property>+			      <property name="xpad">0</property>+			      <property name="ypad">0</property>+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>+			      <property name="width_chars">-1</property>+			      <property name="single_line_mode">False</property>+			      <property name="angle">0</property>+			    </widget>+			    <packing>+			      <property name="padding">0</property>+			      <property name="expand">False</property>+			      <property name="fill">False</property>+			    </packing>+			  </child> 			</widget> 			<packing> 			  <property name="padding">0</property>@@ -5908,6 +6027,31 @@ 			      <property name="fill">False</property> 			    </packing> 			  </child>++			  <child>+			    <widget class="GtkLabel" id="label221">+			      <property name="visible">True</property>+			      <property name="label" translatable="yes"></property>+			      <property name="use_underline">False</property>+			      <property name="use_markup">False</property>+			      <property name="justify">GTK_JUSTIFY_LEFT</property>+			      <property name="wrap">False</property>+			      <property name="selectable">False</property>+			      <property name="xalign">0.5</property>+			      <property name="yalign">0.5</property>+			      <property name="xpad">0</property>+			      <property name="ypad">0</property>+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>+			      <property name="width_chars">-1</property>+			      <property name="single_line_mode">False</property>+			      <property name="angle">0</property>+			    </widget>+			    <packing>+			      <property name="padding">0</property>+			      <property name="expand">False</property>+			      <property name="fill">False</property>+			    </packing>+			  </child> 			</widget> 			<packing> 			  <property name="padding">0</property>Index: linux/settingsdialog.cc===================================================================RCS file: /cvsroot/linuxdcpp/linuxdcpp/linux/settingsdialog.cc,vretrieving revision 1.33diff -u -r1.33 settingsdialog.cc--- linux/settingsdialog.cc	1 Sep 2006 15:05:57 -0000	1.33+++ linux/settingsdialog.cc	9 Sep 2006 22:58:51 -0000@@ -274,6 +274,7 @@ 		sm->set(SettingsManager::SOCKET_IN_BUFFER, Util::toString(gtk_spin_button_get_value(GTK_SPIN_BUTTON(getWidget("socketReadSpinButton"))))); 		sm->set(SettingsManager::SOCKET_OUT_BUFFER, Util::toString(gtk_spin_button_get_value(GTK_SPIN_BUTTON(getWidget("socketWriteSpinButton"))))); 		WSET("default-charset", Text::acpToUtf8(string(gtk_entry_get_text(GTK_ENTRY(getWidget("encodingEntry"))))));+		sm->set(SettingsManager::FAST_HASHING, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(getWidget("fastHashingCheckButton")))); 	}  	sm->save();@@ -746,6 +747,7 @@ 		gtk_spin_button_set_value(GTK_SPIN_BUTTON(getWidget("socketReadSpinButton")), (double)SETTING(SOCKET_IN_BUFFER)); 		gtk_spin_button_set_value(GTK_SPIN_BUTTON(getWidget("socketWriteSpinButton")), (double)SETTING(SOCKET_OUT_BUFFER)); 		gtk_entry_set_text(GTK_ENTRY(getWidget("encodingEntry")), WGETS("default-charset").c_str());+		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(getWidget("fastHashingCheckButton")), SETTING(FAST_HASHING)); 	} }