LINUX.ORG.RU
решено ФорумTalks

Программисты на Си типичные говнокодеры (пруф).

 , , ,


0

1

пруф -> https://git.savannah.gnu.org/cgit/tar.git/tree/src/list.c#n1280

как правильно распарсить выхлоп tar -tvf file.tar если там есть всякие имена с -> или link to? ответ никак, нужно использовать опцию --quoting-style=

как разделить

"'Test D\"   b \"Portable -> 2.11.0'/\" link to . -> _phyiscal." link to "'Test D\"   b \"Portable -> 2.11.0'/\" link to . -> _phyiscal.Original.txt"

поделить строку на две по link to так? нет. нужно найти первую часть от начала и до не закоменченных " (без \ перед ")

так вот вместо того, чтобы добавить в tar вывод каждого файла/заголовка в архиве в терминал как блоки разделенные условным --- привер:

---
number: 1
permissions: drwxrwxrwx
user: userName
group: groupName
size: 184139
date: 2021-11-21
time: 14:50
file: 'Test D\"   b \"Portable -> 2.11.0'/\" link to . -> _phyiscal.
pointTo:  'Test D\"   b \"Portable -> 2.11.0'/\" link to . -> _phyiscal.Original.txt
---
etc

вместо этого tar реально подразумевает парсинг вышеописанного.

Перемещено xaizek из development

★★★★★

Последнее исправление: bhfq (всего исправлений: 1)
Ответ на: комментарий от t184256

Ну почти. Дело в том, что '\0' означает конец строки в C, поэтому файл с ним посреди имени ты не создашь. . и .. обычно зарезервированы ФС, так что встретить их ты можешь, но у них почти всегда специальное значение и вручную создать их невозможно (Я именно в этом ключе думал, когда писал).

anonymous-angler ★☆
()

Кстати, не совсем относится к теме, но из годных способов экранировать строки вспоминаются r строковые литералы из Rust (И Python, правда там немного иначе и по моему субъективному мнению - несколько похуже):

r#"
#include <stdio.h>

int main() {
    printf("Hello,\nWorld!");
}
"#

Идея следующая:

  1. Если кавычек нет, то достаточно r"...". Тогда все символы на месте троеточия воспринимаются компилятором буквально.

  2. Если кавычки есть, но в тексте не встречается последовательность "#, то: r#"..."#.

  3. Если кавычки есть и встречается последовательность "#, то достаточно r##"..."##.

  4. Если кавычки есть и встречается последовательность "##, то достаточно r###"..."###.

  5. И так далее.

Минусы очевидны, но в подавляющем большинстве случаев сильно спасает. При написании регулярок, например.

anonymous-angler ★☆
()
Ответ на: комментарий от BceM_IIpuBeT

Честно говоря, не имеет значения откуда оно взялось. С Lua - так с Lua. Важно что эта фича зачастую крайне удобна.

А как то же самое делается в Lua? Я нагуглил только [[...]], но как его применять, если в тексте есть ]] не нашёл.

anonymous-angler ★☆
()

bhfq ★★★★★

Что скажешь про язык B ?

pacify ★★★★★
()

Требовать от программы, первая версия которой появилась более 40 лет назад, нормального выхлопа это, мягко говоря, оптимистично. tar, наверно , самая старая программа, которая ещё в ходу. :-).

vtVitus ★★★★★
()

От гWWWокодера и слышу! Сам дурак! :-D

sparkie ★★★★★
()
Ответ на: комментарий от i-rinat

видимо я нашел то что нужно и выглядит вроде как очень даже мощно.

https://github.com/rikyoz/bit7z

а ваш libtar давно стух, оригинальный мейнтейнер на гитхабе положил болт.

bhfq ★★★★★
() автор топика
Ответ на: комментарий от vtVitus

А если вспомнить для чего она предназначалась, то тем более :)

anc ★★★★★
()
Ответ на: комментарий от vtVitus

7zz (от оригинального автора 7zip) опцией -slt выводит в консоль именно так как я и описывал желаемое в начале. Сразу видно Игорь знает о возможных юзкейсах пользователей, в отличие от.

Жалко что bit7z оказался windows-only библиотекой.

bhfq ★★★★★
() автор топика
Последнее исправление: bhfq (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.