Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix windows build, add windows GetDefaultDataDir, add files to project #31

Merged
merged 2 commits into from Feb 3, 2014
Merged

Conversation

chertov
Copy link
Contributor

@chertov chertov commented Feb 3, 2014

No description provided.

@chertov
Copy link
Contributor Author

chertov commented Feb 3, 2014

вернул назад I2PEndian.h... если
#include "I2PEndian.h"
в Streaming.cpp приинклудить ниже или вообще не приинклудить, то виндовский компилятор ругается на

384             *(uint64_t *)(buf + size) = htobe64 (ts);

htobe64 - дефайн htonll не объявлен

@orignal
Copy link
Contributor

orignal commented Feb 3, 2014

Насколько я знаю htonll это какая то нестандартная штука

orignal added a commit that referenced this pull request Feb 3, 2014
fix windows build, add windows GetDefaultDataDir, add files to project
@orignal orignal merged commit f6e290d into PurpleI2P:master Feb 3, 2014
@orignal
Copy link
Contributor

orignal commented Feb 3, 2014

А кстати почему он ругается то? Это файл же в "Streaming.h" есть.

@chertov
Copy link
Contributor Author

chertov commented Feb 4, 2014

htonll используется только под виндой в реализации portable_endian.h

Насколько я понимаю дело обстоит так:
"Streaming.h" приинклуден ниже #include "RouterInfo.h", а в "RouterInfo.h" инклудится #include < boost/asio.hpp > и в нем инклудится #include < winsock2.h > (в < boost\asio\detail\socket_types.hpp >), но без дефайна INCL_EXTRA_HTON_FUNCTIONS (в отличии от portable_endian.h), поэтому блок с htonll не объявлен.

@orignal
Copy link
Contributor

orignal commented Feb 4, 2014

Ну htonl и htons это стандартные функции, присутвующие на всех платформах, а вот 64-х разрядных стандартных не было.

А нельзя #include <boost/asio.hpp> впихнуть прямо в I2PEndian.h?

@mikhail4021
Copy link
Contributor

#5 (comment)

в классе LittleEndian реализации с хабра если заменить оператор присваивания на

const T operator = (const T t)
{
for (unsigned i = 0; i < sizeof(T); i++)
bytes[sizeof(T)-1 - i] = static_cast(t >> (i << 3));
return t;
}

то будет работать

@orignal
Copy link
Contributor

orignal commented Feb 4, 2014

А нельзя просто вызвать два раза htonl, а потом 8-байтный swap?

@mikhail4021
Copy link
Contributor

как минимум это получится медленнее, потому что htonX это функции ядра винды, а значит дергаются из вне + своп. по-моему самый простой вариант, это поправить оператор( просто там подразумевалось, что на вход идет другой порядок байт, интерфейс не до конца продуман ) и все будет корректно для винды работать (кроме XBOX'ов =) )

@orignal
Copy link
Contributor

orignal commented Feb 4, 2014

Это с какой стати функции ядра? Ядру там делать нечего - реально это просто последовательность ассеблерных инструкции для соотвествующего процессора.

@mikhail4021
Copy link
Contributor

да ошибся. она ДЛЛку не тянет. там вот что)

#define _WS2_32_WINSOCK_SWAP_LONGLONG(l)
( ( ((l) >> 56) & 0x00000000000000FFLL ) |
( ((l) >> 40) & 0x000000000000FF00LL ) |
( ((l) >> 24) & 0x0000000000FF0000LL ) |
( ((l) >> 8) & 0x00000000FF000000LL ) |
( ((l) << 8) & 0x000000FF00000000LL ) |
( ((l) << 24) & 0x0000FF0000000000LL ) |
( ((l) << 40) & 0x00FF000000000000LL ) |
( ((l) << 56) & 0xFF00000000000000LL ) )

@chertov
Copy link
Contributor Author

chertov commented Feb 5, 2014

mikhail4021, Спасибо... попробовал, работает
Которую реализацию Endian.h оставлять? Обе работают...
реализация с хабра т.к. не тащит за собой никаких зависимостей
portable_endian.h инклудит виндовский winsock2.h
я бы оставил хабровскую реализацию

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants