<html>
  <head>
    <meta content="text/html; charset=ISO-8859-2"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <font face="Helvetica, Arial, sans-serif">Podle me by melo jit
      pouzit funkci memmove(), ktera umi kopirovat prekryvajici se
      oblasti...<br>
      <br>
      Hynek<br>
      <br>
      <br>
    </font>
    <div class="moz-cite-prefix">Dne 3.11.2016 11:57, Miroslav Mraz
      napsal(a):<br>
    </div>
    <blockquote cite="mid:d746d8d6-bbb7-d211-e8fa-2894c4c2944b@volny.cz"
      type="cite">A nejen v oblasti mcu. Zrovna včera jsem hledal chybu
      v jednom projektu - je to jakýsi nástroj pro PLC, jehož historie
      se zřejmě táhne do časů MSDOS. Tak jsem to chtěl upravit aby to
      mohlo běžet i v nějakém normálním prostředí (především linux) a
      narazil jsem - prostě to vyhazovalo chyby. Protože to má celé asi
      13000 řádek kódu, chvíli mi trvalo než se podařilo chybu izolovat
      - ukázalo se, že problém je v knihovní funkci strcpy(char* dest,
      const char* src), která opravdu do dest uložila něco jiného než
      bylo původně v src.
      <br>
      To bylo docela neočekávané, ale stačí se podívat do manuálu -
      řetězce se nesmí překrývat. A zde je jádro pudla. Ten, kdo nástroj
      kdysi tvořil prostě na tohle kašlal. Protože "taky to funguje" a
      ve windows to opravdu funguje. Nedalo mi to se nepodělit, protože
      upřímně řečeno takhle někdy "prasím" taky. A kdo ne, ať hodí
      kamenem.
      <br>
      <br>
      A nevím, zda je to nekompetentnost, lenost nebo se jen věci
      vyvíjejí a jak už to bývá zvykem, obvykle k horšímu. Protože
      workaround spočívá v tom, že strcpy() nahradím prostým kopírováním
      byte po bytu. Což asi původně tak i bylo.
      <br>
      <br>
      Mrazík
      <br>
    </blockquote>
    <br>
  </body>
</html>