Browse Source

Add the check for binary files back in

This does not add it in as it was; it only checks for nul bytes. This is
to prevent problems treating the data as a string.

Signed-off-by: Gavin Howard <gavin@yzena.com>
computed_goto
Gavin Howard 1 year ago
parent
commit
de7f0b83b6
Signed by: gavin
GPG Key ID: C08038BDF280D33E
  1. 2
      include/read.h
  2. 3
      include/status.h
  3. 11
      locales/de_DE.ISO8859-1.msg
  4. 11
      locales/de_DE.UTF-8.msg
  5. 11
      locales/en_US.msg
  6. 11
      locales/es_ES.ISO8859-1.msg
  7. 11
      locales/es_ES.UTF-8.msg
  8. 11
      locales/fr_FR.ISO8859-1.msg
  9. 11
      locales/fr_FR.UTF-8.msg
  10. 11
      locales/ja_JP.UTF-8.msg
  11. 11
      locales/ja_JP.eucJP.msg
  12. 11
      locales/nl_NL.ISO8859-1.msg
  13. 11
      locales/nl_NL.UTF-8.msg
  14. 11
      locales/pl_PL.ISO8859-2.msg
  15. 11
      locales/pl_PL.UTF-8.msg
  16. 11
      locales/pt_PT.ISO8859-1.msg
  17. 11
      locales/pt_PT.UTF-8.msg
  18. 11
      locales/ru_RU.CP1251.msg
  19. 11
      locales/ru_RU.CP866.msg
  20. 11
      locales/ru_RU.ISO8859-5.msg
  21. 11
      locales/ru_RU.KOI8-R.msg
  22. 11
      locales/ru_RU.UTF-8.msg
  23. 11
      locales/zh_CN.GB18030.msg
  24. 11
      locales/zh_CN.GB2312.msg
  25. 11
      locales/zh_CN.GBK.msg
  26. 11
      locales/zh_CN.UTF-8.msg
  27. 11
      locales/zh_CN.eucCN.msg
  28. 3
      src/data.c
  29. 24
      src/read.c

2
include/read.h

@ -46,7 +46,7 @@
* @param c The character to test.
* @return True if @a c is an invalid char.
*/
#define BC_READ_BIN_CHAR(c) (((c) < ' ' && !isspace((c))) || ((uchar) c) > '~')
#define BC_READ_BIN_CHAR(c) (!(c))
/**
* Reads a line from stdin after printing prompt, if desired.

3
include/status.h

@ -306,6 +306,9 @@ typedef enum BcErr {
/// File error, such as permissions or file does not exist.
BC_ERR_FATAL_FILE_ERR,
/// File is binary, not text, error.
BC_ERR_FATAL_BIN_FILE,
/// Attempted to read a directory as a file error.
BC_ERR_FATAL_PATH_DIR,

11
locales/de_DE.ISO8859-1.msg

@ -103,8 +103,9 @@ $set 6
1 "Speicherzuweisung fehlgeschlagen"
2 "Ein-Ausgabe-Fehler"
3 "konnte die Datei nicht öffnen: %s"
4 "Pfad ist ein Verzeichnis: %s"
5 "ungültige Befehlszeilenoption: \"%s\""
6 "Option erfordert ein Argument: '%c' (\"%s\")"
7 "Option benutzt keine Argumente: '%c' (\"%s\")"
8 "ungültiges Argument der Befehlszeilenoption: \"%s\""
4 "Datei ist nicht Text: %s"
5 "Pfad ist ein Verzeichnis: %s"
6 "ungültige Befehlszeilenoption: \"%s\""
7 "Option erfordert ein Argument: '%c' (\"%s\")"
8 "Option benutzt keine Argumente: '%c' (\"%s\")"
9 "ungültiges Argument der Befehlszeilenoption: \"%s\""

11
locales/de_DE.UTF-8.msg

@ -103,8 +103,9 @@ $set 6
1 "Speicherzuweisung fehlgeschlagen"
2 "Ein-Ausgabe-Fehler"
3 "konnte die Datei nicht öffnen: %s"
4 "Pfad ist ein Verzeichnis: %s"
5 "ungültige Befehlszeilenoption: \"%s\""
6 "Option erfordert ein Argument: '%c' (\"%s\")"
7 "Option benutzt keine Argumente: '%c' (\"%s\")"
8 "ungültiges Argument der Befehlszeilenoption: \"%s\""
4 "Datei ist nicht Text: %s"
5 "Pfad ist ein Verzeichnis: %s"
6 "ungültige Befehlszeilenoption: \"%s\""
7 "Option erfordert ein Argument: '%c' (\"%s\")"
8 "Option benutzt keine Argumente: '%c' (\"%s\")"
9 "ungültiges Argument der Befehlszeilenoption: \"%s\""

11
locales/en_US.msg

@ -103,8 +103,9 @@ $set 6
1 "memory allocation failed"
2 "I/O error"
3 "cannot open file: %s"
4 "path is a directory: %s"
5 "invalid command-line option: \"%s\""
6 "option requires an argument: '%c' (\"%s\")"
7 "option takes no arguments: '%c' (\"%s\")"
8 "invalid command-line option argument: \"%s\""
4 "file is not text: %s"
5 "path is a directory: %s"
6 "invalid command-line option: \"%s\""
7 "option requires an argument: '%c' (\"%s\")"
8 "option takes no arguments: '%c' (\"%s\")"
9 "invalid command-line option argument: \"%s\""

11
locales/es_ES.ISO8859-1.msg

@ -103,8 +103,9 @@ $set 6
1 "error en la asignación de memoria"
2 "error de I/O"
3 "no puede abrir el archivo: %s"
4 "el ruta es un directorio: %s"
5 "una opción de línea de comandos no es válida: \"%s\""
6 "una opción requiere un argumento: '%c' (\"%s\")"
7 "una opción no tiene argumento: '%c' (\"%s\")"
8 "uno argumento de opción de línea de comandos no es válido: \"%s\""
4 "el archivo no es texto: %s"
5 "el ruta es un directorio: %s"
6 "una opción de línea de comandos no es válida: \"%s\""
7 "una opción requiere un argumento: '%c' (\"%s\")"
8 "una opción no tiene argumento: '%c' (\"%s\")"
9 "uno argumento de opción de línea de comandos no es válido: \"%s\""

11
locales/es_ES.UTF-8.msg

@ -103,8 +103,9 @@ $set 6
1 "error en la asignación de memoria"
2 "error de I/O"
3 "no puede abrir el archivo: %s"
4 "el ruta es un directorio: %s"
5 "una opción de línea de comandos no es válida: \"%s\""
6 "una opción requiere un argumento: '%c' (\"%s\")"
7 "una opción no tiene argumento: '%c' (\"%s\")"
8 "uno argumento de opción de línea de comandos no es válido: \"%s\""
4 "el archivo no es texto: %s"
5 "el ruta es un directorio: %s"
6 "una opción de línea de comandos no es válida: \"%s\""
7 "una opción requiere un argumento: '%c' (\"%s\")"
8 "una opción no tiene argumento: '%c' (\"%s\")"
9 "uno argumento de opción de línea de comandos no es válido: \"%s\""

11
locales/fr_FR.ISO8859-1.msg

@ -103,8 +103,9 @@ $set 6
1 "échec d'allocation mémoire"
2 "erreur d'entrée-sortie"
3 "impossible d'ouvrir le fichier : %s"
4 "le chemin est un répertoire : %s"
5 "option de ligne de commande invalide : \"%s\""
6 "l'option '%c' (\"%s\") requiert un argument"
7 "l'option '%c' (\"%s\") ne prend pas d'argument"
8 "argument d'option de ligne de commande invalide : \"%s\""
4 "fichier non texte: %s"
5 "le chemin est un répertoire : %s"
6 "option de ligne de commande invalide : \"%s\""
7 "l'option '%c' (\"%s\") requiert un argument"
8 "l'option '%c' (\"%s\") ne prend pas d'argument"
9 "argument d'option de ligne de commande invalide : \"%s\""

11
locales/fr_FR.UTF-8.msg

@ -103,8 +103,9 @@ $set 6
1 "échec d'allocation mémoire"
2 "erreur d'entrée-sortie"
3 "impossible d'ouvrir le fichier : %s"
4 "le chemin est un répertoire : %s"
5 "option de ligne de commande invalide : \"%s\""
6 "l'option '%c' (\"%s\") requiert un argument"
7 "l'option '%c' (\"%s\") ne prend pas d'argument"
8 "argument d'option de ligne de commande invalide : \"%s\""
4 "fichier non texte: %s"
5 "le chemin est un répertoire : %s"
6 "option de ligne de commande invalide : \"%s\""
7 "l'option '%c' (\"%s\") requiert un argument"
8 "l'option '%c' (\"%s\") ne prend pas d'argument"
9 "argument d'option de ligne de commande invalide : \"%s\""

11
locales/ja_JP.UTF-8.msg

@ -103,8 +103,9 @@ $set 6
1 "メモリの割り当てに失敗しました"
2 "I/Oエラー"
3 "ファイルを開けませんでした。%s"
4 "パスはディレクトリです:%s"
5 "無効なコマンドラインオプション:\"%s\""
6 "オプションには引数が必要です:'%c' (\"%s\")"
7 "オプションは引数を取りません:'%c' (\"%s\")"
8 "無効なコマンドラインオプション引数: \"%s\"
4 "ファイルがテキストではない:%s"
5 "パスはディレクトリです:%s"
6 "無効なコマンドラインオプション:\"%s\""
7 "オプションには引数が必要です:'%c' (\"%s\")"
8 "オプションは引数を取りません:'%c' (\"%s\")"
9 "無効なコマンドラインオプション引数: \"%s\"

11
locales/ja_JP.eucJP.msg

@ -103,8 +103,9 @@ $set 6
1 "メモリの割り当てに失敗しました"
2 "I/Oエラー"
3 "ファイルを開けませんでした。%s"
4 "パスはディレクトリです:%s"
5 "無効なコマンドラインオプション:\"%s\""
6 "オプションには引数が必要です:'%c' (\"%s\")"
7 "オプションは引数を取りません:'%c' (\"%s\")"
8 "無効なコマンドラインオプション引数: \"%s\"
4 "ファイルがテキストではない:%s"
5 "パスはディレクトリです:%s"
6 "無効なコマンドラインオプション:\"%s\""
7 "オプションには引数が必要です:'%c' (\"%s\")"
8 "オプションは引数を取りません:'%c' (\"%s\")"
9 "無効なコマンドラインオプション引数: \"%s\"

11
locales/nl_NL.ISO8859-1.msg

@ -103,8 +103,9 @@ $set 6
1 "geheugentoewijzing mislukt"
2 "I/O-fout"
3 "kon geen file openen: %s"
4 "pad is een directory: %s"
5 "ongeldige opdrachtregeloptie: %s"
6 "optie vereist een argument: '%c' (\"%s\")"
7 "optie neemt geen argumenten aan: '%c' (\"%s\")"
8 "ongeldige opdrachtregeloptie argument: %s"
4 "bestand is geen tekst: %s"
5 "pad is een directory: %s"
6 "ongeldige opdrachtregeloptie: %s"
7 "optie vereist een argument: '%c' (\"%s\")"
8 "optie neemt geen argumenten aan: '%c' (\"%s\")"
9 "ongeldige opdrachtregeloptie argument: %s"

11
locales/nl_NL.UTF-8.msg

@ -103,8 +103,9 @@ $set 6
1 "geheugentoewijzing mislukt"
2 "I/O-fout"
3 "kon geen file openen: %s"
4 "pad is een directory: %s"
5 "ongeldige opdrachtregeloptie: %s"
6 "optie vereist een argument: '%c' (\"%s\")"
7 "optie neemt geen argumenten aan: '%c' (\"%s\")"
8 "ongeldige opdrachtregeloptie argument: %s"
4 "bestand is geen tekst: %s"
5 "pad is een directory: %s"
6 "ongeldige opdrachtregeloptie: %s"
7 "optie vereist een argument: '%c' (\"%s\")"
8 "optie neemt geen argumenten aan: '%c' (\"%s\")"
9 "ongeldige opdrachtregeloptie argument: %s"

11
locales/pl_PL.ISO8859-2.msg

@ -103,8 +103,9 @@ $set 6
1 "Alokacja pamięci nie powiodła się"
2 "Błąd we/wy"
3 "nie mógł otworzyć pliku: %s"
4 "ścieżka to katalog: %s"
5 "nieprawidłowa opcja wiersza poleceń: \"%s\""
6 "opcja wymaga argumentu: '%c' (\"%s\")"
7 "opcja nie wymaga żadnych argumentów: '%c' (\"%s\")"
8 "nieprawidłowa argument opcja wiersza poleceń: \"%s\""
4 "plik nie jest tekstem: %s"
5 "ścieżka to katalog: %s"
6 "nieprawidłowa opcja wiersza poleceń: \"%s\""
7 "opcja wymaga argumentu: '%c' (\"%s\")"
8 "opcja nie wymaga żadnych argumentów: '%c' (\"%s\")"
9 "nieprawidłowa argument opcja wiersza poleceń: \"%s\""

11
locales/pl_PL.UTF-8.msg

@ -103,8 +103,9 @@ $set 6
1 "Alokacja pamięci nie powiodła się"
2 "Błąd we/wy"
3 "nie mógł otworzyć pliku: %s"
4 "ścieżka to katalog: %s"
5 "nieprawidłowa opcja wiersza poleceń: \"%s\""
6 "opcja wymaga argumentu: '%c' (\"%s\")"
7 "opcja nie wymaga żadnych argumentów: '%c' (\"%s\")"
8 "nieprawidłowa argument opcja wiersza poleceń: \"%s\""
4 "plik nie jest tekstem: %s"
5 "ścieżka to katalog: %s"
6 "nieprawidłowa opcja wiersza poleceń: \"%s\""
7 "opcja wymaga argumentu: '%c' (\"%s\")"
8 "opcja nie wymaga żadnych argumentów: '%c' (\"%s\")"
9 "nieprawidłowa argument opcja wiersza poleceń: \"%s\""

11
locales/pt_PT.ISO8859-1.msg

@ -103,8 +103,9 @@ $set 6
1 "falha na alocação de memória"
2 "erro de entrada-saída"
3 "impossível abrir o arquivo: %s"
4 "caminho é um diretório: %s"
5 "opção de linha de comando inválida: \"%s\""
6 "opção requer um argumento: '%c' (\"%s\")"
7 "a opção não aceita argumentos: '%c' (\"%s\")"
8 "argumento de opção de linha de comando inválido: \"%s\""
4 "arquivo não é texto: %s"
5 "caminho é um diretório: %s"
6 "opção de linha de comando inválida: \"%s\""
7 "opção requer um argumento: '%c' (\"%s\")"
8 "a opção não aceita argumentos: '%c' (\"%s\")"
9 "argumento de opção de linha de comando inválido: \"%s\""

11
locales/pt_PT.UTF-8.msg

@ -103,8 +103,9 @@ $set 6
1 "falha na alocação de memória"
2 "erro de entrada-saída"
3 "impossível abrir o arquivo: %s"
4 "caminho é um diretório: %s"
5 "opção de linha de comando inválida: \"%s\""
6 "opção requer um argumento: '%c' (\"%s\")"
7 "a opção não aceita argumentos: '%c' (\"%s\")"
8 "argumento de opção de linha de comando inválido: \"%s\""
4 "arquivo não é texto: %s"
5 "caminho é um diretório: %s"
6 "opção de linha de comando inválida: \"%s\""
7 "opção requer um argumento: '%c' (\"%s\")"
8 "a opção não aceita argumentos: '%c' (\"%s\")"
9 "argumento de opção de linha de comando inválido: \"%s\""

11
locales/ru_RU.CP1251.msg

@ -103,8 +103,9 @@ $set 6
1 "Не удалось выделить память"
2 "Ошибка ввода/вывода"
3 "не смог открыть файл: %s"
4 "путь - это каталог: %s"
5 "неверная опция командной строки: \"%s\""
6 "опция требует аргумента: '%c' (\"%s\")"
7 "опция не принимает аргументов: '%c' (\"%s\")"
8 "неверный аргумент опции командной строки: \"%s\""
4 "файл не является текстовым: %s"
5 "путь - это каталог: %s"
6 "неверная опция командной строки: \"%s\""
7 "опция требует аргумента: '%c' (\"%s\")"
8 "опция не принимает аргументов: '%c' (\"%s\")"
9 "неверный аргумент опции командной строки: \"%s\""

11
locales/ru_RU.CP866.msg

@ -103,8 +103,9 @@ $set 6
1 "<EFBFBD>Ѕ уЄ ЋЎсь ЂыЄЅЋЈть Џ Ќять"
2 "<EFBFBD>шЈЁЊ  ЂЂЎЄ /ЂыЂЎЄ "
3 "­Ѕ сЌЎЃ ЎтЊрыть ф ЉЋ: %s"
4 "¯ãâì - íâ® ª â «®£: %s"
5 "­¥¢¥à­ ï ®¯æ¨ï ª®¬ ­¤­®© áâப¨: \"%s\""
6 "®¯æ¨ï âॡã¥â  à£ã¬¥­â : '%c' (\"%s\")"
7 "®¯æ¨ï ­¥ ¯à¨­¨¬ ¥â  à£ã¬¥­â®¢: '%c' (\"%s\")"
8 "­¥¢¥à­ë©  à£ã¬¥­â ®¯æ¨¨ ª®¬ ­¤­®© áâப¨: \"%s\""
4 "ä ©« ­¥ ï¥âáï ⥪á⮢ë¬: %s"
5 "¯ãâì - íâ® ª â «®£: %s"
6 "­¥¢¥à­ ï ®¯æ¨ï ª®¬ ­¤­®© áâப¨: \"%s\""
7 "®¯æ¨ï âॡã¥â  à£ã¬¥­â : '%c' (\"%s\")"
8 "®¯æ¨ï ­¥ ¯à¨­¨¬ ¥â  à£ã¬¥­â®¢: '%c' (\"%s\")"
9 "­¥¢¥à­ë©  à£ã¬¥­â ®¯æ¨¨ ª®¬ ­¤­®© áâப¨: \"%s\""

11
locales/ru_RU.ISO8859-5.msg

@ -103,8 +103,9 @@ $set 6
1 "Не удалось выделить память"
2 "Ошибка ввода/вывода"
3 "не смог открыть файл: %s"
4 "путь - это каталог: %s"
5 "неверная опция командной строки: \"%s\""
6 "опция требует аргумента: '%c' (\"%s\")"
7 "опция не принимает аргументов: '%c' (\"%s\")"
8 "неверный аргумент опции командной строки: \"%s\""
4 "файл не является текстовым: %s"
5 "путь - это каталог: %s"
6 "неверная опция командной строки: \"%s\""
7 "опция требует аргумента: '%c' (\"%s\")"
8 "опция не принимает аргументов: '%c' (\"%s\")"
9 "неверный аргумент опции командной строки: \"%s\""

11
locales/ru_RU.KOI8-R.msg

@ -102,8 +102,9 @@ $set 6
1 "Не удалось выделить память"
2 "Ошибка ввода/вывода"
3 "не смог открыть файл: %s"
4 "путь - это каталог: %s"
5 "неверная опция командной строки: \"%s\""
6 "опция требует аргумента: '%c' (\"%s\")"
7 "опция не принимает аргументов: '%c' (\"%s\")"
8 "неверный аргумент опции командной строки: \"%s\""
4 "файл не является текстовым: %s"
5 "путь - это каталог: %s"
6 "неверная опция командной строки: \"%s\""
7 "опция требует аргумента: '%c' (\"%s\")"
8 "опция не принимает аргументов: '%c' (\"%s\")"
9 "неверный аргумент опции командной строки: \"%s\""

11
locales/ru_RU.UTF-8.msg

@ -103,8 +103,9 @@ $set 6
1 "Не удалось выделить память"
2 "Ошибка ввода/вывода"
3 "не смог открыть файл: %s"
4 "путь - это каталог: %s"
5 "неверная опция командной строки: \"%s\""
6 "опция требует аргумента: '%c' (\"%s\")"
7 "опция не принимает аргументов: '%c' (\"%s\")"
8 "неверный аргумент опции командной строки: \"%s\""
4 "файл не является текстовым: %s"
5 "путь - это каталог: %s"
6 "неверная опция командной строки: \"%s\""
7 "опция требует аргумента: '%c' (\"%s\")"
8 "опция не принимает аргументов: '%c' (\"%s\")"
9 "неверный аргумент опции командной строки: \"%s\""

11
locales/zh_CN.GB18030.msg

@ -103,8 +103,9 @@ $set 6
1 "内存分配失败"
2 "I/O错误"
3 "无法打开文件:%s"
4 "路径是一个目录:%s"
5 "无效的命令行选项:\"%s\""
6 "选项需要一个参数:'%c'(\"%s\")"
7 "选项不需要参数:'%c'(\"%s\")"
8 "无效的命令行选项参数:\"%s\""
4 "文件不是文本:%s"
5 "路径是一个目录:%s"
6 "无效的命令行选项:\"%s\""
7 "选项需要一个参数:'%c'(\"%s\")"
8 "选项不需要参数:'%c'(\"%s\")"
9 "无效的命令行选项参数:\"%s\""

11
locales/zh_CN.GB2312.msg

@ -103,8 +103,9 @@ $set 6
1 "内存分配失败"
2 "I/O错误"
3 "无法打开文件:%s"
4 "路径是一个目录:%s"
5 "无效的命令行选项:\"%s\""
6 "选项需要一个参数:'%c'(\"%s\")"
7 "选项不需要参数:'%c'(\"%s\")"
8 "无效的命令行选项参数:\"%s\""
4 "文件不是文本:%s"
5 "路径是一个目录:%s"
6 "无效的命令行选项:\"%s\""
7 "选项需要一个参数:'%c'(\"%s\")"
8 "选项不需要参数:'%c'(\"%s\")"
9 "无效的命令行选项参数:\"%s\""

11
locales/zh_CN.GBK.msg

@ -103,8 +103,9 @@ $set 6
1 "内存分配失败"
2 "I/O错误"
3 "无法打开文件:%s"
4 "路径是一个目录:%s"
5 "无效的命令行选项:\"%s\""
6 "选项需要一个参数:'%c'(\"%s\")"
7 "选项不需要参数:'%c'(\"%s\")"
8 "无效的命令行选项参数:\"%s\""
4 "文件不是文本:%s"
5 "路径是一个目录:%s"
6 "无效的命令行选项:\"%s\""
7 "选项需要一个参数:'%c'(\"%s\")"
8 "选项不需要参数:'%c'(\"%s\")"
9 "无效的命令行选项参数:\"%s\""

11
locales/zh_CN.UTF-8.msg

@ -103,8 +103,9 @@ $set 6
1 "内存分配失败"
2 "I/O错误"
3 "无法打开文件:%s"
4 "路径是一个目录:%s"
5 "无效的命令行选项:\"%s\""
6 "选项需要一个参数:'%c'(\"%s\")"
7 "选项不需要参数:'%c'(\"%s\")"
8 "无效的命令行选项参数:\"%s\""
4 "文件不是文本:%s"
5 "路径是一个目录:%s"
6 "无效的命令行选项:\"%s\""
7 "选项需要一个参数:'%c'(\"%s\")"
8 "选项不需要参数:'%c'(\"%s\")"
9 "无效的命令行选项参数:\"%s\""

11
locales/zh_CN.eucCN.msg

@ -103,8 +103,9 @@ $set 6
1 "内存分配失败"
2 "I/O错误"
3 "无法打开文件:%s"
4 "路径是一个目录:%s"
5 "无效的命令行选项:\"%s\""
6 "选项需要一个参数:'%c'(\"%s\")"
7 "选项不需要参数:'%c'(\"%s\")"
8 "无效的命令行选项参数:\"%s\""
4 "文件不是文本:%s"
5 "路径是一个目录:%s"
6 "无效的命令行选项:\"%s\""
7 "选项需要一个参数:'%c'(\"%s\")"
8 "选项不需要参数:'%c'(\"%s\")"
9 "无效的命令行选项参数:\"%s\""

3
src/data.c

@ -198,7 +198,7 @@ const uchar bc_err_ids[] = {
BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE,
BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE,
BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE,
BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE,
BC_ERR_IDX_PARSE,
#endif // BC_ENABLED
};
@ -215,6 +215,7 @@ const char* const bc_err_msgs[] = {
"memory allocation failed",
"I/O error",
"cannot open file: %s",
"file is not text: %s",
"path is a directory: %s",
"bad command-line option: \"%s\"",
"option requires an argument: '%c' (\"%s\")",

24
src/read.c

@ -72,6 +72,22 @@ static int bc_read_open(const char* path, int mode) {
return fd;
}
/**
* Returns true if the buffer data is non-text.
* @param buf The buffer to test.
* @param size The size of the buffer.
*/
static bool bc_read_binary(const char *buf, size_t size) {
size_t i;
for (i = 0; i < size; ++i) {
if (BC_ERR(BC_READ_BIN_CHAR(buf[i]))) return true;
}
return false;
}
bool bc_read_buf(BcVec *vec, char *buf, size_t *buf_len) {
char *nl;
@ -207,6 +223,9 @@ BcStatus bc_read_line(BcVec *vec, const char *prompt) {
s = bc_read_chars(vec, prompt);
#endif // BC_ENABLE_HISTORY
if (BC_ERR(bc_read_binary(vec->v, vec->len - 1)))
bc_verr(BC_ERR_FATAL_BIN_FILE, bc_program_stdin_name);
return s;
}
@ -254,6 +273,11 @@ char* bc_read_file(const char *path) {
// Got to have a nul byte.
buf[size] = '\0';
if (BC_ERR(bc_read_binary(buf, size))) {
e = BC_ERR_FATAL_BIN_FILE;
goto read_err;
}
close(fd);
return buf;

Loading…
Cancel
Save