[Homeros] Fwd: Ошибки в Voiceman
Дмитрий Падучих
dpaduchikh на gmail.com
Ср Сен 21 11:20:39 UTC 2011
Michael Pozhidaev:
MP> если сильно увлекаться знаковыми типами, компилятор тебя засыпет
MP> предупреждениями типа signed/unsigned comparison. Вот на это я
MP> действительно наступал. Избежать этого невозможно, поскольку в
MP> стандартной библиотеке везде наставлены беззнаковые значения.
MP> Размеры строк, списков, индексы символов в строке - всё беззнаковое.
MP> Даже тривиальный strlen(), и тот желает отдавать результат строго
MP> без знака.
Насчёт strlen.
for (int i=0, len=strlen(s); i < len; i++)
putchar(s[i]);
Компилируется без предупреждений и работает без ошибок для всех s, длина
которых не превосходит INT_MAX. Впрочем, в этом примере особой разницы
нет - со знаком или без. И я, в общем-то, ничего против беззнаковых
типов не имею, когда они реально удобнее.
Насчёт грабель. Я имел в виду вот эти:
voiceman$ git show e98a99555c9228f9aa24d102e2039a0a18a9c755
commit e98a99555c9228f9aa24d102e2039a0a18a9c755
Author: Michael Pozhidaev <msp на altlinux.ru>
Date: Thu May 13 16:02:54 2010 +0700
Fixed segmentation fauld in double numbers parsing
diff --git a/daemon/main/configuration.h b/daemon/main/configuration.h
index 7e09f52..feac9f2 100644
--- a/daemon/main/configuration.h
+++ b/daemon/main/configuration.h
@@ -2,8 +2,6 @@
#ifndef __VOICEMAN_CONFIGURATION_H__
#define __VOICEMAN_CONFIGURATION_H__
-//FIXME:*.0 in double values causes sigseg
-
#include"CmdArgsParser.h"
#include"ConfigurationException.h"
#include"langs/LangManager.h"
diff --git a/utils/vmstrings.h b/utils/vmstrings.h
index 51ca50c..a6bf876 100644
--- a/utils/vmstrings.h
+++ b/utils/vmstrings.h
@@ -300,9 +300,11 @@ double parseAsDouble(const T& s)
}
if (!s2.empty())
{
- typename T::size_type z = s2.length() - 1;
- while(z >= 0 && s2[z] == '0') z--;
- if (z >= 0)
+ typename T::size_type z = 0;
+ for(i = 0;i < s2.length();i++)
+ if (s2[i] != '0')
+ z = i;
+ if (s2[z] != '0')
{
for(i = 0;i <= z;i++)
{
voiceman$
--
Дмитрий Падучих
Подробная информация о списке рассылки Homeros