to post messages and comments.

← All posts tagged C

кто хочет поработать на благо военки в славном городе гатчине (от питера добраться просто) за какие-то 80-90к (если все уметь) или на сколько-то меньше, если быть готовым учиться. Делать так чтобы корабли меньше тонули, а на складах было меньше ЧП, ну или хотя бы чтобы об этом узнали все кому следует знать. Там всякие C + возможно что-то более высокоуровневое можно.
Говорят секретности или нет или та, что проблем с загран паспортом и выездами не будет.

lmdb C ?

Кто-нить в lmdb шарит?

#if SIZE_MAX > MAXDATASIZE
if (data->mv_size > ((mc->mc_db->md_flags & MDB_DUPSORT) ? ENV_MAXKEY(env) : MAXDATASIZE))
return MDB_BAD_VALSIZE;
#else


вот кусок кода, у меня стоит MDB_DEVEL, поэтому MAX_KEYSIZE=0, поэтому если запрос запускается с MDB_DUPSORT, то получается, что я всегда попадаю в data->mv_size > 0 => MDB_BAD_VALSIZE?

это так и задумано или бага?

Вот есть в rust enum, я делаю repr(C) и надеюсь в сях (на самом деле в хацкелях) получить отображение этой структурки. Т.к. документация зашкаливает или я не умею её искать то беру gdb и смотрю что там вижу:

(gdb) print a
$3 = {{RUST$ENUM$DISR = BCC, __0 = 0, __1 = 4294967295}, {
RUST$ENUM$DISR = BCC, __0 = 18446744073709551615}}
(gdb) ptype a
type = union RustEnum {
struct A;
struct BCC;
}
(gdb) ptype struct A
type = struct A {
enum class RustEnum RUST$ENUM$DISR;
i32 __0;
u32 __1;
}
(gdb) ptype struct BCC
type = struct BCC {
enum class RustEnum RUST$ENUM$DISR;
u64 __0;
}
(gdb) ptype enum RustEnum
type = enum class RustEnum {A, BCC}

вопрос, что за чудо этот enum class и каким образом мне написать сишный typedef, чтобы правильно отображал данную структуру.

Если я правильно понимаю, то enum class это более умный enum и я могу радостно использовать __tag вместо этого, а что с размером? По каким-то докам минимальный достаточный для отображения типов, так ли это? и могу ли я положиться на порядок или нет?

В новом gcc появился -fsanitize, который заменяет пол валгринда и ловит датарейсы, use-after-freeи out-of-bounds доступы (в рантайме конечно). Вопрос, кто из гентушников в CFLAGS добавлял systemwide и как много сломается?

делаем container_of в одном месте, передаем то поле в фунцию, в callback в другом треде делаем тот же container_of на переденное поле имеющее тот же адрес и получаем другое значение WTF?!

а у кого можно спрашивать всякие тупые вопросы по низкоуровненой фигне, ответ RTFM, с указанием TFM, принимаются. вопросы типа таких, вот у нас есть HT, как я понимаю это есть одно реальное ядро и два виртуальных, при этом часть операций с виртуальных может выполняться одновременно, напр умножение плавучки на одном и целочисленное сложение на другом, а если одно и тоже действие на обоих ядрах, то все вычисляется последовательно будет, это так? если не так то куда почитать за правильным объяснением? и какие операции могут выполняться параллельно где почитать? а если есть тривиальные сишные примеры то было б совсем круто их посмотреть

В одном проекте тут наткнулся на:
 
Helper macro creating an anonymous function with a given body.

For example:

@code
int foo(int x)
   {
           int y = x + 1;

	   bar(LAMBDA(int, (int z) { return z + y; }));
	   ...
   }
@endcode

Все ок если: нету свободных переменных, или только свободные переменные с статически известными адресами, иначе в kernel-space все плохо, в user-space все хорошо, где lamda не вызывается, когда функция где она опеделена выходит. 

Но все равно забавно.

и ещё кто-нить может мне рассказать куда смотреть за примитивами блокировок в rts ghc? а то нужно read-write лок со следующими характеристиками замутить:

1. writer может начинать писать если никто не читает
2. если writer пишет, то никто другой не может ни читать, ни писать
3. читать могут много потоков одновременно

Самому очень лень писать такое, т.к. я дурак и багов будет много

есть модули с функцией с аттрибутом constructor, т.е. вызывающейся перед main. эта функиция не потокобезопасна, модулей много, могут ли возникнуть проблемы. а если модули погружаются динамически (как в ghci)?

Имеется {uint64_t,uint64_t}
функция для получения хэша: hashWord умеющая делать хэш от указателя
и функция hashString умеющая делать хэш от char *.

как имея эти штуки посчитать нормальный хэш от {uint64_t, uint64_t}

В общем приходит мне SIGCHLD я его обрабатываю и вызываю
getAnyProcessStatus, который враппер над waidpid(3), и в результате мне приходит ошибка, что child-ов то и нету (No child processes)

Куда копать?

а нету ли ни у кого интересных задачек на численные методы (желательно не сверх глубоких), которые можно сделать на haskell/c. нужны для 1. пунктиков в CV, 2. пунктика в опыте для фирмы. Готов для участие в статье (ну или хотя бы упоминание).

я уже спрашивал, но ищется какая-нить простенькая RTS под BSD лицензией.

В данном случае под RTS я имею ввиду, простое апи предоставляющее mainloop, возможность добавления и удаления callback-ов хотя бы только через добавление fd+связанная функция в poll и callback на timeout. Можно и что-то поумнее, но условие, чтобы работало на POSIX совместимных платформах.