Путь приложения

Applications development, KoOS API questions
  • На практике нужно хорошо постараться, чтоб получить путь длиннее 1024 байт, потому проблема скорей теоретическая.
  • Мне кажется, что ограничение на длину пути может быть только для определенных приложений для совместимости с различными ОС, файловыми системами и функции "записи" iso-образов. Потому как большинство файловых систем не имеет ограничений на длину пути. И для приложений Колибри его теоретически тоже может не быт.
    Pathoswithin wrote:На практике нужно хорошо постараться, чтоб получить путь длиннее 1024 байт, потому проблема скорей теоретическая.
    Я с этой проблемой столкнулся в далёком 2003 году, когда собственноручно награбленную коллекцию mp3-шек на болванку (оптический диск) записывал. Тогда я еще не пользовался ID3-тегами (а возможно и не знал), и как можно больше данных в имена файлов и папок помещал. :mrgreen:
  • Pathoswithin wrote:И я действительно не признаю косяков
    Даже доказывать не надо.
    Pathoswithin wrote:На практике нужно хорошо постараться, чтоб получить путь длиннее 1024 байт, потому проблема скорей теоретическая.
    Вероятностное программирование: если вероятность проявления бага мала можно считать, что его нет. © Pathoswithin
  • Да, я консервативен и люблю вероятностное программирование. Жаль, что его эпоха миновала, и в наше время можно считать, что бага нет, если он не сильно мешает.
  • Теперь и Quake не работает!

    Мне все меньше нравится сердечко в начале пути.
    Из хаоса в космос
  • ... а мне всё меньше нравятся высокоуровневые языки. Что они там с этой строкой вытворяют?
  • Нет никакой магии, у низкоуровневых должна быть та же самая проблема.

    Вангую, что они берут полный путь программы, обрезают имя и добавляют имя ресурса, который лежит по соседству в этой же папки. Пытаются его загрузить и обламываются.
    Из хаоса в космос
  • Ассемблерные программы именно так и делают, и вроде не обламываются.
  • У меня была проблема в С--, давай я завтра тебе зарепорчу.
    Из хаоса в космос
  • Я предполагаю, что некоторые программы просто соединяют argv[0] и остальные параметры в одну строку, а затем делают парсинг этой строки. При этом, управляющие символы, к которым относится "сердечко" приравниваются к пробелам. И получается, что argv[0] = "", а путь приложения оказывается в argv[1]. Возможные решения:
    - Сделать UTF-8 без маркера, по умолчанию.
    - Записывать юникодный argv[0] не в 0x20, а куда-нибудь в другое место. Если свободных полей в заголовке исполняемого файла больше не осталось, то есть еще сигнатура "MENUET01" -- два dword'а с адресами 0x0 и 0x4.
  • И получается, что argv[0] = "", а путь приложения оказывается в argv[1]
    Этого точно не получается. Путь не может попасть в аргументы командной строки.
  • Pathoswithin wrote:... а мне всё меньше нравятся высокоуровневые языки. Что они там с этой строкой вытворяют?
    Я никогда не буду нарушать обратную совместимость. Я никогда не буду нарушать обратную совместимость. Я никогда не буду нарушать обратную совместимость. Я никогда не буду нарушать обратную совместимость. Я никогда не буду нарушать обратную совместимость. Я никогда не буду нарушать обратную совместимость. Я никогда не буду нарушать обратную совместимость. Я никогда не буду нарушать обратную совместимость. Я никогда не буду нарушать обратную совместимость. Я никогда не буду нарушать обратную совместимость. Я никогда не буду нарушать обратную совместимость.
  • В newlib захаркодено 1024 байта на путь.

    И 64 открытых файла на программу (это так, к слову).
  • Serge wrote:Этого точно не получается. Путь не может попасть в аргументы командной строки.
    Пожалуй, что да.
    Но всё равно интересно, какое дело приложению может быть до первого байта.
    Leency wrote:Вангую, что они берут полный путь программы, обрезают имя и добавляют имя ресурса, который лежит по соседству в этой же папки. Пытаются его загрузить и обламываются.
    Вот алгоритм:

    Взять путь.
    Найти конец строки.
    От конца строки в обратном направлении искать "слэш".
    Обрезать строку по последнему слэшу.
    Приписать имя ресурса.

    Это работает как в Windows, так и в KolibriOS. Несмотря на то, что пути в этих ОС начинаются с разных символов.
  • Who is online

    Users browsing this forum: No registered users and 7 guests