Igor
Да и вообще все операции с файлами
Snusmumriken
Звучит как повод катать что-то типа:
#ifdef WIN_32
mytype readfile() {
}
...
UtoECat
Igor
Igor
Не помню уже почему откинул эту идею
Igor
Но наверное ща так и сделаю
Igor
А, вспомнил
Igor
Хендлы же файлов разные между виндовым и юниксовым стандартом
Igor
То есть файл открытый через OpenFile() виндовую не такой же, как тот, что открыт через fopen
Igor
Если я правильно помню
UtoECat
Igor
Потому что так тоже будут разные структуры у файла
Igor
Igor
Я какое-то время думал, что fopen, fclose, fread, fwrite, fseek это обёртки над виндовыми функциями, теми, что в ведре лежат
UtoECat
Igor
Но потом как-то попробовал хендл от fopen использовать в виндовых вызовах и что-то всё посыпалось
Igor
Igor
Это не решит её тоже
Igor
Проблема в том, что LuaJIT условный возвращает хендл файла от своего рантайма
Igor
А моя библиотека пытается работать с ним как с хендлом своего рантайма
Igor
Igor
Не компилить же всем в таком виде постоянно своё всё
Igor
Нужно чтобы со всеми компилерами работало нормально
UtoECat
Igor
Ну да, вот такой код уже не отрабатывает
Igor
В буфер пишется 0xCC 0xCC 0xCC 0xCC
Igor
Snusmumriken
Даладна
Igor
Igor
Только код пожирнее станет, правда
Snusmumriken
Это да
Igor
У меня тут скомпоновано всё классненько
Igor
Хотя можно просто сделать чтобы функции возвращали нужные значения
Igor
И менять особо не придется ничего
Igor
В самой функции, имею ввиду
Igor
короче что-то типа такого сделаю)))
Snusmumriken
Возня с луёвым стеком это и правда малясь морока, но это дело можно выделить во вспомогательные функции а ля:
luaX_getmethod(L, "methodname", -1);
И оно типа вытащит функцию, пропихнет объект первым аргументом и будет ждать следующих для вызова.
Igor
Я чет забыл, а f:read() может ошибку вернуть?)) Безопасно делать lua_call() с ним?
Snusmumriken
Оно именно возвращает ошибку а не рейзит еррор
Igor
Ну и хорошо
Snusmumriken
nil, error, два аргумента обработаешь
Igor
Не люблю я конечно дохрена жонглирования данными по буферам
Igor
Но тут придётся строчку из fread копировать в буфер
Igor
Хотя можно эту строку сразу возвращать, в принципе
Igor
Всё равно в пределах вызова этой функции она всегда валидна будет
Snusmumriken
Ну типа того.
Igor
Ой ладно, пока просто с копированием сделаю, а то код страшновато выглядеть будет)))
Igor
Строки в числа кастовать придется
Snusmumriken
Пока нет реальных проблем — читаемость > производительность.
Igor
Вроде должно работать, ща проверим
Igor
Ой, функция в топе же должна быть, ступил чета
Snusmumriken
Не принципиально, остальное починишь
Igor
Во, даже работает как надо
Igor
Давно я чет луи не трогал с сишной стороны, подзабылись уже некоторые моменты
Igor
Осталось обернуть fseek
Snusmumriken
Ну прост серьёзно, если ты получаешь объекты из определённой среды, то пущай эта среда с объектами и работает.
Igor
Ну так-то да
Snusmumriken
Тем более что всю кроссплатформу там уже внутри решили
Snusmumriken
Кстати, примерно по этим причинам обычно сишные библиотеки принимают пути до файлов а не сами файлы.
Строчки в виде char *, к счастью, более-менее стандартны.
Igor
Вот финальные варианты, если кому интересно))
Igor
Вроде и заголовок читает правильно
Igor
И с ловкой крашиться перестало, ляпота
Snusmumriken
Snusmumriken
А если вдруг ощущаешь просадки производительности — просто реже считывай. Буфер побольше и вперед.
Сишка действительно медленнее вызывает луашку чем луашка сишку, но вот насколько это критично — в каждом случае по своему, и как правило нет.
Igor
Igor
Это просто у меня бзик такой, не люблю неоптимальные решения))
Igor
Но оптимальные писать иногда как-то лениво
Snusmumriken
Я от этого вылечился на своей работе.
Snusmumriken
Там иногда такие сроки, что даже максимально неоптимальное решение может быть слишком медленным.
И ничего, работает. А если приходят жалобы на скорость — это как правило не из-за скорости исполнения кода, а всякие ожидания что что-то внешнее отработает.
Snusmumriken
Правда, когда я только устраивался, я как-то по криворукости устроил отключение электричества в офисе. Забыл поставить sleep в цикле.
Igor
Ахахахаххаха