Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 09/12/2023, à 10:36

ar barzh paour

[BUG en cours] manquent des accents avec lshw -html

le bug est en cours (2023-12-11)
https://bugs.launchpad.net/ubuntu/+sour … ug/2046151

je me suis aperçu qu'il manquait dans les résultats de lshw -html certains accents
ce qui rend quelquefois pénible la lecture du résultat ou bien qui peut induire en erreur
avez-vous le même résultat que moi ?
lshw version 02.19.git.2021.06.19.996aaad9c7-2build1
sur
Linux probook.local 6.2.0-37-generic
ubuntu 22.04.3

un exemple correct sans -html

jpb@probook:~$ sudo lshw 
  *-core                    
       description: Carte mère
       produit: 3074
       fabricant: Hewlett-Packard
       identifiant matériel: 0
       version: KBC Version 24.0E
       numéro de série: CNU0161MH1
       
  *-memory
       description: Mémoire Système
       identifiant matériel: 4
       emplacement: Carte mère
       taille: 4GiB      

       
avec l'option -html , certains accents des valeurs disparaissent , les champ "titre" ont bien les accents

jpb@probook:~$ sudo lshw -html
ce qui donne (pour plus de clarté j'ai supprimé toutes les balises html)

id:	             core
description: 	 Carte mre ( au lieu de Carte mère )
produit: 	     3074
fabricant: 	     Hewlett-Packard
identifiant 
matériel:        0
version: 	     KBC Version 24.0E
numéro de série: CNU0161MH1

id:	             memory
description: 	 Mmoire Systme ( au lieu de Mémoire Système )
identifiant 
matériel:        4
emplacement: 	 Carte mre ( au lieu de mère )
taille: 	     4GiB


description: 	 Priphrique de stockage de masse ( au lieu de Périphérique )

description: 	 Interface rseau sans fil ( au lieu de réseau )


nom logique:     /media/jpb/site-AVé
mais avec -html il manque le "é"
nom logique: 	 /media/jpb/site-AV

bien qu'il me donne quand même plus loin
pour la configuration de ce disque

configuration:
label	        =	site-AVé
lastmountpoint	=	/media/jpb/site-AVé

Dernière modification par ar barzh paour (Le 01/03/2024, à 07:48)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram W10-PRO( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#2 Le 09/12/2023, à 12:18

Nuliel

Re : [BUG en cours] manquent des accents avec lshw -html

Bonjour,

avez-vous le même résultat que moi ?

Pour carte mère j'ai la même chose

nuliel@nuliel-Latitude-E7270:~$ sudo lshw -html | grep -i carte 
       <tr><td class="first">description: </td><td class="second">Carte mre</td></tr>
          <tr><td class="first">emplacement: </td><td class="second">Carte mre</td></tr>
nuliel@nuliel-Latitude-E7270:~$

Pourtant en faisant

nuliel@nuliel-Latitude-E7270:~$ dpkg -S lshw
language-pack-gnome-en-base: /usr/share/locale-langpack/en_GB/LC_MESSAGES/lshw.mo
language-pack-gnome-en-base: /usr/share/locale-langpack/en_AU/LC_MESSAGES/lshw.mo
language-pack-gnome-fr-base: /usr/share/locale-langpack/fr/LC_MESSAGES/lshw.mo
lshw: /usr/share/man/man1/lshw.1.gz
lshw: /usr/share/doc/lshw/changelog.Debian.gz
lshw: /usr/share/doc/lshw
lshw: /usr/bin/lshw
lshw: /usr/share/doc/lshw/copyright

on trouve le fichier de traduction et on trouve la bonne chaine, avec l'accent:

nuliel@nuliel-Latitude-E7270:~$ strings -e S /usr/share/locale-langpack/fr/LC_MESSAGES/lshw.mo | grep -i "carte mère"
Carte mère
Carte mère

Vu que tu as certains accents mais pas tous, je pense qu'il faudrait regarder au niveau de lshw lui-même (son code source) et pas au niveau de la traduction qui a l'air ok.

Et en regardant le code source https://github.com/lyonel/lshw, on trouve aussi des fichiers de traduction fr qui contiennent carte mère avec accent

Dernière modification par Nuliel (Le 09/12/2023, à 12:32)

Hors ligne

#3 Le 10/12/2023, à 18:40

ar barzh paour

Re : [BUG en cours] manquent des accents avec lshw -html

je ne sais pas trop quoi répondre
lshw tout seul c'est OK, mais avec l'option -html c'est pas bon
j'ai essayé de passer un bug, mais à chaque fois que j'ai voulu "passer un bug", c'est la galère et j'abondonne

Dernière modification par ar barzh paour (Le 10/12/2023, à 18:43)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram W10-PRO( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#4 Le 10/12/2023, à 19:22

iznobe

Re : [BUG en cours] manquent des accents avec lshw -html

Bonjour , à mon avis c' est plutot parce que lorsqu ' on utilise une sortie au format html ( ou XML aussi ) , le traitement ne fait pas qu ' ajouter les balises .
il transforme aussi les retours et les traductions .

Exemple :

iznobe@iznobe-PC:~$ sudo lshw -json | grep -i carte
      "description" : "Carte mère",
          "slot" : "Carte mère",
iznobe@iznobe-PC:~$

ici le traitement au format json ne modifie pas les accents , au format HTML selon comment est configuré le " transformateur " HTML , il ne supporte pas les caracteres accentués et donc vire simplement ce caractere qu ' il ne connait pas .
Faudrait inspecter le code source et verifier comment on passe sur une sortie en HTML par exemple . ou encore demander au dev de modifier ( si possible ) pour que ca prenne aussi en charge les carateres avec accents .

Dernière modification par iznobe (Le 10/12/2023, à 19:25)


retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#5 Le 10/12/2023, à 20:15

Astrolivier

Re : [BUG en cours] manquent des accents avec lshw -html

salut,

https://github.com/lyonel/lshw/blob/mas … e/print.cc

if (html)
      cout << " <tbody>" << endl;

    if (node.getDescription() != "")
    {
      tab(level + 1, false);
      if (html)
        cout << "<tr><td class=\"first\">";
      cout << _("description") << ": ";
      if (html)
      {
        cout << "</td><td class=\"second\">";
        cout << escape(node.getDescription());
        cout << "</td></tr>";
      }
      else
        cout << node.getDescription();
      cout << endl;
    }

n'y aurait-il pas une raison pour laquelle escape(node.getDescription() n'aimerait pas l'utf8 ou un truc du genre ?


S'il faut absolument faire des sacrifices pour assurer le progrès de l'humanité, ne serait-il pas indispensable de s'en tenir au principe selon lequel c'est à ceux dont on exige le sacrifice que la décision doit revenir en dernier ressort ? (howard zinn)

Hors ligne

#6 Le 10/12/2023, à 20:47

Nuliel

Re : [BUG en cours] manquent des accents avec lshw -html

Je me suis renseigné et vu https://www.gnu.org/software/gettext/ma … l#Overview je pense finalement que ce n'est pas au niveau du code source que se trouve le problème. Si je comprends bien, au niveau du code source il n'y a que de l'anglais qui est marqué comme "à traduire" ou pas, c'est la librairie gettext qui se débrouille de traduire à l'exécution.
Mais je saurais pas dire comment régler ce problème

@Astrolivier: quand on regarde la chaine traduite de Carte mère dans fr.mo en hexadécimal, on a:

43 61 72 74 65 20 6d c3 a8 72 65
C  a   r  t  e    m  è       r  e
c3 a8 <- è

Pour moi la fonction escape peut pas être échappée involontairement

Dernière modification par Nuliel (Le 10/12/2023, à 20:55)

Hors ligne

#7 Le 11/12/2023, à 09:09

iznobe

Re : [BUG en cours] manquent des accents avec lshw -html

Bonjour le soucis serait donc dans la fonction " gettext " à laquelle il faut faire prendre en compte les caracteres accentués .
Selon le format de sortie utilisé , il devrait y avoir possibilitté de lui donner des parametres .

A voir aussi ce que fait exactement la fonction " escape " mais de memoire si c ' est comme HTML / PHP , ca vire les trucs suceptible de faire des injections de code , donc theoriquement pas les caracteres accentués .


NOTE : une autre possibilité a envisager , serait que le fait que la langue d ' origine etant l ' anglais ca ne convertit pas correctement en francais tous les caracteres , mais là difficile d ' intervenir de toute maniere .



Le plus simple est à mon avis de faire remonter l' info , le dev du paquet lshw en aura pour quelques minutes à corriger .

Dernière modification par iznobe (Le 11/12/2023, à 09:11)


retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#8 Le 11/12/2023, à 09:20

Astrolivier

Re : [BUG en cours] manquent des accents avec lshw -html

ce n'est que mon avis de débutant !

dans le bout de code que j'ai mis au dessus on a node.getdescription(). cette méthode n'a rien de particulier et revoie des accents sans le html (le else) et pas d'accent en html (le if)
la seule différence c'est la fonction escape que voici (dans outils.cc)

string escape(const string & s)
{
  string result = "";

  for (unsigned int i = 0; i < s.length(); i++)
    // #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
    if (s[i] == 0x9
        || s[i] == 0xA
        || s[i] == 0xD
        || s[i] >= 0x20)
      switch (s[i])
      {
        case '<':
          result += "&lt;";
          break;
        case '>':
          result += "&gt;";
          break;
        case '&':
          result += "&amp;";
          break;
        case '"':
          result += "&quot;";
          break;
      default:
        result += s[i];
    }

  return result;
}

je ne vois pas pourquoi cette fonction enlèverait le "è" (ou coderait sur un seul octet) mais force est de constater. et tu (Nuliel) as montré que les trad (mo et tout) étaient correctes. ça ne passe pas par un interpréteur html donc pas de soucis de ce côté là.

j'en sais pas plus (enfin ce serait cool de corriger un bug dans lshw !  même s'il y a peu de chance)

Dernière modification par Astrolivier (Le 11/12/2023, à 09:36)


S'il faut absolument faire des sacrifices pour assurer le progrès de l'humanité, ne serait-il pas indispensable de s'en tenir au principe selon lequel c'est à ceux dont on exige le sacrifice que la décision doit revenir en dernier ressort ? (howard zinn)

Hors ligne

#9 Le 11/12/2023, à 12:07

nany

Re : [BUG en cours] manquent des accents avec lshw -html

Bonjour,



Nuliel a écrit :

Et en regardant le code source https://github.com/lyonel/lshw

Peut-être vaudrait-il mieux regarder le code source de lshw pour Ubuntu : https://git.launchpad.net/ubuntu/+source/lshw/ ?

L’affichage de class="first" (qui mets les accents) est différent de celui de class="second" (qui efface les lettres accentuées).
Or, comme l’a souligné Astrolivier, la différence réside dans la fonction escape. Mais cette fonction est identique à ce qu’a mis Astrolivier ci-dessus.

Bon courage.


PS : j’ai créé un rapport de bug, n’hésitez pas à vous ajouter comme personne affectée (en cliquant sur Does this bug affect you?).

Dernière modification par nany (Le 11/12/2023, à 13:21)

En ligne

#10 Le 11/12/2023, à 14:29

iznobe

Re : [BUG en cours] manquent des accents avec lshw -html

Bonjour nany et merci pour les eclaircissements .

j ' ai co-signé la déclaration de bug .


retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#11 Le 11/12/2023, à 15:09

Astrolivier

Re : [BUG en cours] manquent des accents avec lshw -html

faut vivre avec son temps, j'ai demandé à chat gpt

The escape function you've posted seems to be designed to escape characters that are considered special in HTML, replacing them with their corresponding HTML entities. However, the function as it stands will skip characters with ASCII values less than 0x20 (excluding tabs, newlines, and carriage returns).

If you want to include accentuated characters like é or è, you need to adjust the condition that checks if a character is greater than or equal to 0x20. You may also want to consider handling Unicode characters appropriately.

Here's a modified version of your function to include characters with ASCII values less than 0x20:

cpp

#include <string>

std::string escape(const std::string &s) {
  std::string result = "";

  for (unsigned int i = 0; i < s.length(); i++) {
    // #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
    if (s[i] == 0x9 || s[i] == 0xA || s[i] == 0xD || (s[i] >= 0x20 && s[i] <= 0xD7FF) || (s[i] >= 0xE000 && s[i] <= 0xFFFD) || (s[i] >= 0x10000 && s[i] <= 0x10FFFF)) {
      switch (s[i]) {
        case '<':
          result += "&lt;";
          break;
        case '>':
          result += "&gt;";
          break;
        case '&':
          result += "&amp;";
          break;
        case '"':
          result += "&quot;";
          break;
        default:
          result += s[i];
      }
    }
  }

  return result;
}

This modification includes characters with ASCII values less than 0x20 while still excluding control characters such as tabs, newlines, and carriage returns. If you want to include all characters, you might need to adjust the conditions further based on your specific requirements. Additionally, if you're dealing with Unicode characters, consider using wide characters (wchar_t) and appropriate functions from the wctype.h library for more robust handling.


maintenant j'essaie de comprendre la réponse
(ah oui désolé je préfère l'anglais technique donc je lui ai causé en anglais, mais la condition en code reste la même)
tongue




edit : merde j'ai fait bugger chat gpt en voulant avoir des détails sur la condition lol

User
you just gave me back the original function with 's(i) >= 0x20' condition that you told me was the problem. I can't make sense of it. why this condition is not allowing the printing of accuentated characters


ChatGPT

I apologize for the confusion in my responses. The condition s(i) >= 0x20 is not inherently problematic for including accented characters. I misunderstood your question, and I appreciate your patience.

In the original code, the condition
Error in input stream
1 / 2
There was an error generating a response

ps : j'ai modifié les crochets en (i) à cause des balises bbcode






edit 2 :


bon ben c'est bien la fonction escape a priori. je vous mets le gdb, j'ai fait un breakpoint à la fonction escape et je vous mets le résultat ou j'ai passé  "heèèeeh" (j'ai pas envie de passer mon sytème en fr) comme string et ça ne passe pas dans result quand c'est un caractère accentué. il passe direct de la condition " if (s(i) == 0x9" à l'iteration suivante de la boucle for.  il manque le switch.

comme ça je pense que s.length est trop court et fait coder sur un octet lors de l'initialisation de la string (s=""), ce qui fait que la condition s(i) >= 0x20 est aussi limité à 255 (0xFF)

:~/Programmes/lshw$ gdb --args ./src/lshw -html
GNU gdb (Ubuntu 12.1-0ubuntu1~22.04) 12.1
Copyright (C) 2022 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./src/lshw...
(gdb) break /home/poney2204/Programmes/lshw/src/core/osutils.cc:479
Breakpoint 1 at 0x6f4da: file osutils.cc, line 480.
(gdb) run
Starting program: /home/poney2204/Programmes/lshw/src/lshw -html
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
WARNING: you should run this program as super-user.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator"  content="lshw-B.02.19.91" />
<style type="text/css">
  .first {font-weight: bold; margin-left: none; padding-right: 1em;vertical-align: top; }
  .second {padding-left: 1em; width: 100%; vertical-align: center; }
  .id {font-family: monospace;}
  .indented {margin-left: 2em; border-left: dotted thin #dde; padding-bottom: 1em; }
  .node {border: solid thin #ffcc66; padding: 1em; background: #ffffcc; }
  .node-unclaimed {border: dotted thin #c3c3c3; padding: 1em; background: #fafafa; color: red; }
  .node-disabled {border: solid thin #f55; padding: 1em; background: #fee; color: gray; }
</style>
<title>poney2204-inspiron</title>
</head>
<body>
<div class="indented">
<table width="100%" class="node" summary="attributes of poney2204-inspiron">
 <thead><tr><td class="first">id:</td><td class="second"><div class="id">poney2204-inspiron</div></td></tr></thead>
 <tbody>

Breakpoint 1, escape (s="Computer") at osutils.cc:480
480     {
(gdb) step
481       string result = "";
(gdb) step
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string<std::allocator<char> > (this=0x7fffffffdb50, __s=0x555555634a08 "", __a=...) at /usr/include/c++/11/bits/basic_string.h:533
533           basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
(gdb) step
534           : _M_dataplus(_M_local_data(), __a)
(gdb) info locals
__end = <optimized out>
(gdb) step
536             const _CharT* __end = __s ? __s + traits_type::length(__s)
(gdb) step
std::char_traits<char>::length (__s=0x555555634a08 "") at /usr/include/c++/11/bits/char_traits.h:396
396             if (__constant_string_p(__s))
(gdb) step
std::__constant_string_p<char> (__s=0x555555634a08 "") at /usr/include/c++/11/bits/char_traits.h:290
290           return __builtin_is_constant_evaluated();
(gdb) step
std::char_traits<char>::length (__s=0x555555634a08 "") at /usr/include/c++/11/bits/char_traits.h:396
396             if (__constant_string_p(__s))
(gdb) step
399             return __builtin_strlen(__s);
(gdb) step
__strlen_sse2 () at ../sysdeps/x86_64/multiarch/strlen-vec.S:41
41      ../sysdeps/x86_64/multiarch/strlen-vec.S: Aucun fichier ou dossier de ce type.
(gdb) step
85      in ../sysdeps/x86_64/multiarch/strlen-vec.S
(gdb) step
86      in ../sysdeps/x86_64/multiarch/strlen-vec.S
(gdb) step
87      in ../sysdeps/x86_64/multiarch/strlen-vec.S
(gdb) step
88      in ../sysdeps/x86_64/multiarch/strlen-vec.S
(gdb) step
89      in ../sysdeps/x86_64/multiarch/strlen-vec.S
(gdb) step
90      in ../sysdeps/x86_64/multiarch/strlen-vec.S
(gdb) step
91      in ../sysdeps/x86_64/multiarch/strlen-vec.S
(gdb) step
93      in ../sysdeps/x86_64/multiarch/strlen-vec.S
(gdb) step
95      in ../sysdeps/x86_64/multiarch/strlen-vec.S
(gdb) step
126     in ../sysdeps/x86_64/multiarch/strlen-vec.S
(gdb) step
127     in ../sysdeps/x86_64/multiarch/strlen-vec.S
(gdb) step
128     in ../sysdeps/x86_64/multiarch/strlen-vec.S
(gdb) step
129     in ../sysdeps/x86_64/multiarch/strlen-vec.S
(gdb) step
130     in ../sysdeps/x86_64/multiarch/strlen-vec.S
(gdb) step
131     in ../sysdeps/x86_64/multiarch/strlen-vec.S
(gdb) step
__strlen_sse2 () at ../sysdeps/x86_64/multiarch/strlen-vec.S:133
133     in ../sysdeps/x86_64/multiarch/strlen-vec.S
(gdb) step
std::char_traits<char>::length (__s=0x555555634a08 "") at /usr/include/c++/11/bits/char_traits.h:399
399             return __builtin_strlen(__s);
(gdb) step
400           }
(gdb) step
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string<std::allocator<char> > (this=0x7fffffffdb50, __s=0x555555634a08 "", __a=...) at /usr/include/c++/11/bits/basic_string.h:539
539             _M_construct(__s, __end, random_access_iterator_tag());
(gdb) step
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_construct<char const*> (this=0x7fffffffdb50, __beg=0x555555634a08 "", __end=0x555555634a08 "") at /usr/include/c++/11/bits/basic_string.tcc:206
206           basic_string<_CharT, _Traits, _Alloc>::
(gdb) step
211             if (__gnu_cxx::__is_null_pointer(__beg) && __beg != __end)
(gdb) step
__gnu_cxx::__is_null_pointer<char const> (__ptr=0x555555634a08 "") at /usr/include/c++/11/ext/type_traits.h:153
153         { return __ptr == 0; }
(gdb) step
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_construct<char const*> (this=0x7fffffffdb50, __beg=0x555555634a08 "", __end=0x555555634a08 "") at /usr/include/c++/11/bits/basic_string.tcc:211
211             if (__gnu_cxx::__is_null_pointer(__beg) && __beg != __end)
(gdb) step
215             size_type __dnew = static_cast<size_type>(std::distance(__beg, __end));
(gdb) step
std::distance<char const*> (__first=0x555555634a08 "", __last=0x555555634a08 "") at /usr/include/c++/11/bits/stl_iterator_base_funcs.h:142
142                                  std::__iterator_category(__first));
(gdb) step
std::__iterator_category<char const*> () at /usr/include/c++/11/bits/stl_iterator_base_types.h:239
239         { return typename iterator_traits<_Iter>::iterator_category(); }
(gdb) step
std::distance<char const*> (__first=0x555555634a08 "", __last=0x555555634a08 "") at /usr/include/c++/11/bits/stl_iterator_base_funcs.h:141
141           return std::__distance(__first, __last,
(gdb) step
std::__distance<char const*> (__first=0x555555634a08 "", __last=0x555555634a08 "") at /usr/include/c++/11/bits/stl_iterator_base_funcs.h:104
104           return __last - __first;
(gdb) step
105         }
(gdb) step
std::distance<char const*> (__first=0x555555634a08 "", __last=0x555555634a08 "") at /usr/include/c++/11/bits/stl_iterator_base_funcs.h:143
143         }
(gdb) step
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_construct<char const*> (this=0x7fffffffdb50, __beg=0x555555634a08 "", __end=0x555555634a08 "") at /usr/include/c++/11/bits/basic_string.tcc:215
215             size_type __dnew = static_cast<size_type>(std::distance(__beg, __end));
(gdb) step
217             if (__dnew > size_type(_S_local_capacity))
(gdb) step
225               { this->_S_copy_chars(_M_data(), __beg, __end); }
(gdb) step
232             _M_set_length(__dnew);
(gdb) step
233           }
(gdb) step
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string<std::allocator<char> > (this=0x7fffffffdb50, __s=0x555555634a08 "", __a=...) at /usr/include/c++/11/bits/basic_string.h:540
540           }
(gdb) step
escape (s="Computer") at osutils.cc:483
483       for (unsigned int i = 0; i < s.length(); i++)
(gdb) info locals
i = 32767
result = ""
(gdb) call s.assign("heèèeeh")
$1 = "heèèeeh"
(gdb) step
485         if (s[i] == 0x9
(gdb) step
488             || s[i] >= 0x20)
(gdb) step
486             || s[i] == 0xA
(gdb) step
487             || s[i] == 0xD
(gdb) step
488             || s[i] >= 0x20)
(gdb) step
485         if (s[i] == 0x9
(gdb) step
489           switch (s[i])
(gdb) step
504             result += s[i];
(gdb) step
483       for (unsigned int i = 0; i < s.length(); i++)
(gdb) step
485         if (s[i] == 0x9
(gdb) step
488             || s[i] >= 0x20)
(gdb) step
486             || s[i] == 0xA
(gdb) step
487             || s[i] == 0xD
(gdb) watch result
Hardware watchpoint 2: result
(gdb) watch result
Hardware watchpoint 3: result
(gdb) step
488             || s[i] >= 0x20)
(gdb) step
485         if (s[i] == 0x9
(gdb) step
489           switch (s[i])
(gdb) step
504             result += s[i];
(gdb) step

Hardware watchpoint 2: result

Old value = "h"
New value = "h"

Hardware watchpoint 3: result

Old value = "h"
New value = "h"
0x00007ffff7ebdab5 in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator+=(char) () from /lib/x86_64-linux-gnu/libstdc++.so.6
(gdb) step
Single stepping until exit from function _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEc,
which has no line number information.

Hardware watchpoint 2: result

Old value = "h"
New value = "he"

Hardware watchpoint 3: result

Old value = "h"
New value = "he"
0x00007ffff7ebdabc in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator+=(char) () from /lib/x86_64-linux-gnu/libstdc++.so.6
(gdb) step
Single stepping until exit from function _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEc,
which has no line number information.

Hardware watchpoint 2: result

Old value = "he"
New value = "he"

Hardware watchpoint 3: result

Old value = "he"
New value = "he"
0x00007ffff7ebdac1 in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator+=(char) () from /lib/x86_64-linux-gnu/libstdc++.so.6
(gdb) step
Single stepping until exit from function _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEc,
which has no line number information.
escape (s="heèèeeh") at osutils.cc:483
483       for (unsigned int i = 0; i < s.length(); i++)
(gdb) step
485         if (s[i] == 0x9
(gdb) step
488             || s[i] >= 0x20)
(gdb) step
486             || s[i] == 0xA
(gdb) step
487             || s[i] == 0xD
(gdb) step
488             || s[i] >= 0x20)
(gdb) step
485         if (s[i] == 0x9
(gdb) step
483       for (unsigned int i = 0; i < s.length(); i++)
(gdb) step
485         if (s[i] == 0x9
(gdb) step
488             || s[i] >= 0x20)
(gdb) step
486             || s[i] == 0xA
(gdb) step
487             || s[i] == 0xD
(gdb) step
488             || s[i] >= 0x20)
(gdb) step
485         if (s[i] == 0x9
(gdb) step
483       for (unsigned int i = 0; i < s.length(); i++)
(gdb) step
485         if (s[i] == 0x9
(gdb) step
488             || s[i] >= 0x20)
(gdb) step
486             || s[i] == 0xA
(gdb) step
487             || s[i] == 0xD
(gdb) step
488             || s[i] >= 0x20)
(gdb) step
485         if (s[i] == 0x9
(gdb) step
483       for (unsigned int i = 0; i < s.length(); i++)
(gdb) step
485         if (s[i] == 0x9
(gdb) step
488             || s[i] >= 0x20)
(gdb) step
486             || s[i] == 0xA
(gdb) step
487             || s[i] == 0xD
(gdb) step
488             || s[i] >= 0x20)
(gdb) step
485         if (s[i] == 0x9
(gdb) step
483       for (unsigned int i = 0; i < s.length(); i++)
(gdb) step
485         if (s[i] == 0x9
(gdb) step
488             || s[i] >= 0x20)
(gdb) step
486             || s[i] == 0xA
(gdb) step
487             || s[i] == 0xD
(gdb) step
488             || s[i] >= 0x20)
(gdb) step
485         if (s[i] == 0x9
(gdb) step
489           switch (s[i])
(gdb) step
504             result += s[i];
(gdb) step

Hardware watchpoint 2: result

Old value = "he"
New value = "he"

Hardware watchpoint 3: result

Old value = "he"
New value = "he"
0x00007ffff7ebdab5 in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator+=(char) () from /lib/x86_64-linux-gnu/libstdc++.so.6
(gdb) step
Single stepping until exit from function _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEc,
which has no line number information.

Hardware watchpoint 2: result

Old value = "he"
New value = "hee"

Hardware watchpoint 3: result

Old value = "he"
New value = "hee"
0x00007ffff7ebdabc in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator+=(char) () from /lib/x86_64-linux-gnu/libstdc++.so.6
(gdb) step
Single stepping until exit from function _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEc,
which has no line number information.

Hardware watchpoint 2: result

Old value = "hee"
New value = "hee"

Hardware watchpoint 3: result

Old value = "hee"
New value = "hee"
0x00007ffff7ebdac1 in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator+=(char) () from /lib/x86_64-linux-gnu/libstdc++.so.6
(gdb) step
Single stepping until exit from function _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEc,
which has no line number information.
escape (s="heèèeeh") at osutils.cc:483
483       for (unsigned int i = 0; i < s.length(); i++)
(gdb) step
485         if (s[i] == 0x9
(gdb) step
488             || s[i] >= 0x20)
(gdb) step
486             || s[i] == 0xA
(gdb) step
487             || s[i] == 0xD
(gdb) step
488             || s[i] >= 0x20)
(gdb) step
485         if (s[i] == 0x9
(gdb) step
489           switch (s[i])
(gdb) step
504             result += s[i];
(gdb) step

Hardware watchpoint 2: result

Old value = "hee"
New value = "hee"

Hardware watchpoint 3: result

Old value = "hee"
New value = "hee"
0x00007ffff7ebdab5 in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator+=(char) () from /lib/x86_64-linux-gnu/libstdc++.so.6
(gdb) step
Single stepping until exit from function _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEc,
which has no line number information.

Hardware watchpoint 2: result

Old value = "hee"
New value = "heee"

Hardware watchpoint 3: result

Old value = "hee"
New value = "heee"
0x00007ffff7ebdabc in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator+=(char) () from /lib/x86_64-linux-gnu/libstdc++.so.6
(gdb) 

Dernière modification par Astrolivier (Le 11/12/2023, à 23:29)


S'il faut absolument faire des sacrifices pour assurer le progrès de l'humanité, ne serait-il pas indispensable de s'en tenir au principe selon lequel c'est à ceux dont on exige le sacrifice que la décision doit revenir en dernier ressort ? (howard zinn)

Hors ligne

#12 Le 13/12/2023, à 12:58

Astrolivier

Re : [BUG en cours] manquent des accents avec lshw -html

j'ai trouvé d'où venait l'erreur. dans la fonction escape est fait une condition if qui sélectionne quelques caractères et tous ceux au dessus de 0x20. ça marche pour l'ascii mais la manière de coder une std::string renvoie des nombres négatifs sur les caractères accentués (ou le chinois, j'ai testé tongue ). donc on rajoute la condition <0 et c'est bon.

j'ai fait un fork de lshw ici avec la modif... mais j'arrive pas à tester. j'ai essayé sur un 23.10 tout en français et lshw me sort de l'anglais. bref, est-ce que quelqu'un voudrait tester la nouvelle version pour vérifier avant que je me ridiculise d'un pull request !

https://github.com/olivierPrigent/lshw/tree/master

git clone https://github.com/olivierPrigent/lshw.git

une fois dans le dossier

make

lancer

lshw

S'il faut absolument faire des sacrifices pour assurer le progrès de l'humanité, ne serait-il pas indispensable de s'en tenir au principe selon lequel c'est à ceux dont on exige le sacrifice que la décision doit revenir en dernier ressort ? (howard zinn)

Hors ligne

#13 Le 13/12/2023, à 15:33

O_20_100_O

Re : [BUG en cours] manquent des accents avec lshw -html

Bonjour,
Ça marche !

le lshw -html compilé a écrit :

id:   
elitedesk
produit:     HP EliteDesk 800 G3 DM 35W (Y3A16AV)


description:     Carte mère
produit:     829A
fabriquant:     HP
identifiant matériel:    

id:   
memory
description:     Mémoire Système

Dernière modification par O_20_100_O (Le 13/12/2023, à 16:15)

Hors ligne

#14 Le 13/12/2023, à 16:45

ar barzh paour

Re : [BUG en cours] manquent des accents avec lshw -html

@Atrolivier
ça me dépasse un peu mais
@nany
merci pour la déclaration de bug
je me suis ajouté dans la liste des personnes affectés à ce bug
@iznobe (post 7)
Le plus simple est à mon avis de faire remonter l' info , le dev du paquet lshw en aura pour quelques minutes à corriger

il y a actuellement une trentaine de signalisation de bug concernant lswh


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram W10-PRO( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#15 Le 13/12/2023, à 16:50

Astrolivier

Re : [BUG en cours] manquent des accents avec lshw -html

super, merci beaucoup big_smile


S'il faut absolument faire des sacrifices pour assurer le progrès de l'humanité, ne serait-il pas indispensable de s'en tenir au principe selon lequel c'est à ceux dont on exige le sacrifice que la décision doit revenir en dernier ressort ? (howard zinn)

Hors ligne