Commit e8097c55 authored by Thomas Braun's avatar Thomas Braun
Browse files

Merge branch 'fix-variable-shadowing' into 'main'

Fix shadowed variables

Close #113

See merge request !131
parents b8d4db9b 38322785
Loading
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -40,7 +40,7 @@ endif()
if (MSVC)
    target_compile_options(Databaseds PUBLIC /W3)
else()
    target_compile_options(Databaseds PUBLIC -Wall -Wextra -D_FORTIFY_SOURCE=2 -O1)
    target_compile_options(Databaseds PUBLIC -Wall -Wextra -D_FORTIFY_SOURCE=2 -O1 -Wshadow)
endif()


+27 −27
Original line number Diff line number Diff line
@@ -2682,9 +2682,9 @@ Tango::DevString DataBase::db_get_class_for_device(Tango::DevString argin)
    if(n_rows == 0)
    {
        mysql_free_result(result);
        TangoSys_MemStream tms;
        tms << "Class not found for " << argin;
        Tango::Except::throw_exception(DB_IncorrectArguments, tms.str().c_str(), "DataBase::db_get_class_for_device()");
        TangoSys_MemStream err;
        err << "Class not found for " << argin;
        Tango::Except::throw_exception(DB_IncorrectArguments, err.str().c_str(), "DataBase::db_get_class_for_device()");
    }

    if(n_rows > 0)
@@ -3396,7 +3396,7 @@ Tango::DevVarStringArray *DataBase::db_get_device_attribute_property2(const Tang
    MYSQL_ROW row;
    int n_rows = 0, n_props = 0;
    argout = new Tango::DevVarStringArray;
    const char *tmp_device, *tmp_attribute;
    const char *tmp_device;

    TimeVal before, after;
    GetTime(before);
@@ -3452,7 +3452,7 @@ Tango::DevVarStringArray *DataBase::db_get_device_attribute_property2(const Tang
    {
        for(unsigned int i = 1; i < property_names->length(); i++)
        {
            tmp_attribute = (*property_names)[i];
            const char *tmp_attribute = (*property_names)[i];
            sql_query_stream.str("");
            sql_query_stream << "SELECT name,value FROM property_attribute_device WHERE device = \"" << tmp_device
                             << "\" AND attribute LIKE \"" << tmp_attribute << "\" ORDER BY name,count";
@@ -3651,9 +3651,9 @@ Tango::DevVarStringArray *DataBase::db_get_device_attribute_property2(const Tang
                snprintf(n_rows_str, sizeof(n_rows_str), "%d", prop_nb);
                (*argout)[n_props - 1] = CORBA::string_dup(n_rows_str);

                for(int i = 0; i < prop_nb; i++)
                for(int j = 0; j < prop_nb; j++)
                {
                    PropDef &pd = (pos->second)[i];
                    PropDef &pd = (pos->second)[j];
                    int prop_size = pd.prop_val.size();
                    int old_n_props = n_props;
                    n_props = n_props + 2 + prop_size;
@@ -3663,9 +3663,9 @@ Tango::DevVarStringArray *DataBase::db_get_device_attribute_property2(const Tang
                    snprintf(n_rows_str, sizeof(n_rows_str), "%d", prop_size);
                    (*argout)[old_n_props++] = CORBA::string_dup(n_rows_str);

                    for(int j = 0; j < prop_size; j++)
                    for(int k = 0; k < prop_size; k++)
                    {
                        (*argout)[old_n_props++] = CORBA::string_dup(pd.prop_val[j].c_str());
                        (*argout)[old_n_props++] = CORBA::string_dup(pd.prop_val[k].c_str());
                    }
                }
            }
@@ -4089,7 +4089,7 @@ Tango::DevVarLongStringArray *DataBase::db_get_device_info(Tango::DevString argi
    MYSQL_RES *result;
    MYSQL_ROW row;
    int n_rows = 0;
    int exported, pid;
    int dev_exported, pid;
    std::string tmp_device;

    INFO_STREAM << "DataBase::ImportDevice(): get import info for " << argin << " device " << std::endl;
@@ -4180,14 +4180,14 @@ Tango::DevVarLongStringArray *DataBase::db_get_device_info(Tango::DevString argi
                }
            }

            exported = -1;
            dev_exported = -1;
            if(row[0] != nullptr)
            {
                exported = ParseString<int>(row[0]);
                dev_exported = ParseString<int>(row[0]);
            }
            n_lvalues++;
            (argout->lvalue).length(n_lvalues);
            (argout->lvalue)[n_lvalues - 1] = exported;
            (argout->lvalue)[n_lvalues - 1] = dev_exported;
            pid = -1;
            if(row[3] != nullptr)
            {
@@ -5627,7 +5627,7 @@ Tango::DevVarLongStringArray *DataBase::db_import_device(Tango::DevString argin)
    MYSQL_RES *result;
    MYSQL_ROW row;
    int n_rows = 0;
    int exported, pid;
    int dev_exported, pid;
    std::string tmp_device;

    TimeVal before, after;
@@ -5703,14 +5703,14 @@ Tango::DevVarLongStringArray *DataBase::db_import_device(Tango::DevString argin)
            {
                (argout->svalue)[n_svalues - 5] = CORBA::string_dup("");
            }
            exported = -1;
            dev_exported = -1;
            if(row[0] != nullptr)
            {
                exported = ParseString<int>(row[0]);
                dev_exported = ParseString<int>(row[0]);
            }
            n_lvalues++;
            (argout->lvalue).length(n_lvalues);
            (argout->lvalue)[n_lvalues - 1] = exported;
            (argout->lvalue)[n_lvalues - 1] = dev_exported;
            pid = -1;
            if(row[3] != nullptr)
            {
@@ -5770,7 +5770,7 @@ Tango::DevVarLongStringArray *DataBase::db_import_event(Tango::DevString argin)
    MYSQL_RES *result;
    MYSQL_ROW row;
    int n_rows = 0;
    int exported, pid;
    int dev_exported, pid;
    std::string tmp_event;

    TimeVal before, after;
@@ -5808,14 +5808,14 @@ Tango::DevVarLongStringArray *DataBase::db_import_event(Tango::DevString argin)
            (argout->svalue)[n_svalues - 3] = CORBA::string_dup(row[1]);
            (argout->svalue)[n_svalues - 2] = CORBA::string_dup(row[2]);
            (argout->svalue)[n_svalues - 1] = CORBA::string_dup(row[4]);
            exported = -1;
            dev_exported = -1;
            if(row[0] != nullptr)
            {
                exported = ParseString<int>(row[0]);
                dev_exported = ParseString<int>(row[0]);
            }
            n_lvalues++;
            (argout->lvalue).length(n_lvalues);
            (argout->lvalue)[n_lvalues - 1] = exported;
            (argout->lvalue)[n_lvalues - 1] = dev_exported;
            pid = -1;
            if(row[3] != nullptr)
            {
@@ -8081,7 +8081,7 @@ Tango::DevVarStringArray *DataBase::db_get_device_pipe_property(const Tango::Dev
    MYSQL_ROW row;
    int n_rows = 0, n_props = 0;
    argout = new Tango::DevVarStringArray;
    const char *tmp_device, *tmp_pipe;
    const char *tmp_device;

    TimeVal before, after;
    GetTime(before);
@@ -8135,7 +8135,7 @@ Tango::DevVarStringArray *DataBase::db_get_device_pipe_property(const Tango::Dev
    {
        for(unsigned int i = 1; i < property_names->length(); i++)
        {
            tmp_pipe = (*property_names)[i];
            const char *tmp_pipe = (*property_names)[i];
            sql_query_stream.str("");
            sql_query_stream << "SELECT name,value FROM property_pipe_device WHERE device = \"" << tmp_device
                             << "\" AND pipe LIKE \"" << tmp_pipe << "\" ORDER BY name,count";
@@ -8332,9 +8332,9 @@ Tango::DevVarStringArray *DataBase::db_get_device_pipe_property(const Tango::Dev
                snprintf(n_rows_str, sizeof(n_rows_str), "%d", prop_nb);
                (*argout)[n_props - 1] = CORBA::string_dup(n_rows_str);

                for(int i = 0; i < prop_nb; i++)
                for(int j = 0; j < prop_nb; j++)
                {
                    PropDef &pd = (pos->second)[i];
                    PropDef &pd = (pos->second)[j];
                    int prop_size = pd.prop_val.size();
                    int old_n_props = n_props;
                    n_props = n_props + 2 + prop_size;
@@ -8344,9 +8344,9 @@ Tango::DevVarStringArray *DataBase::db_get_device_pipe_property(const Tango::Dev
                    snprintf(n_rows_str, sizeof(n_rows_str), "%d", prop_size);
                    (*argout)[old_n_props++] = CORBA::string_dup(n_rows_str);

                    for(int j = 0; j < prop_size; j++)
                    for(int k = 0; k < prop_size; k++)
                    {
                        (*argout)[old_n_props++] = CORBA::string_dup(pd.prop_val[j].c_str());
                        (*argout)[old_n_props++] = CORBA::string_dup(pd.prop_val[k].c_str());
                    }
                }
            }
+7 −7
Original line number Diff line number Diff line
@@ -763,21 +763,21 @@ bool DataBase::host_port_from_ior(const char *iorstr, std::string &h_p)

                if(host_is_name == false)
                {
                    struct sockaddr_in s;
                    struct sockaddr_in sock;
                    char service[20];

                    s.sin_family = AF_INET;
                    sock.sin_family = AF_INET;
                    int res;
#ifdef _TG_WINDOWS_
                    s.sin_addr.s_addr = inet_addr(ho.c_str());
                    if(s.sin_addr.s_addr != INADDR_NONE)
                    sock.sin_addr.s_addr = inet_addr(ho.c_str());
                    if(sock.sin_addr.s_addr != INADDR_NONE)
#else
                    res = inet_pton(AF_INET, ho.c_str(), &(s.sin_addr.s_addr));
                    res = inet_pton(AF_INET, ho.c_str(), &(sock.sin_addr.s_addr));
                    if(res == 1)
#endif
                    {
                        res = getnameinfo((const struct sockaddr *) &s,
                                          sizeof(s),
                        res = getnameinfo((const struct sockaddr *) &sock,
                                          sizeof(sock),
                                          ho_name,
                                          sizeof(ho_name),
                                          service,
+4 −2
Original line number Diff line number Diff line
@@ -15,8 +15,10 @@ int ParseString<int>(const char *c_str)

    if(ret != 1 || ret == EOF)
    {
        Tango::Except::throw_exception(
            DB_ParseStringError, "Could not parse string to number", "DataBase::ParseString");
        std::stringstream sstr;
        sstr << "Could not parse the string \"" << c_str << "\" to number";

        Tango::Except::throw_exception(DB_ParseStringError, sstr.str(), "DataBase::ParseString");
    }

    return val;
+122 −1
Original line number Diff line number Diff line
@@ -30,7 +30,8 @@ std::vector<std::string> ExtractStringVector(Tango::DeviceData &dd)
    return vec;
}

Tango::DeviceData MakeDeviceDataStringArray(std::initializer_list<std::string> list = {})
template <typename T>
Tango::DeviceData MakeDeviceDataStringArray_impl(T &list)
{
    int idx = 0;
    Tango::DeviceData dd;
@@ -47,6 +48,16 @@ Tango::DeviceData MakeDeviceDataStringArray(std::initializer_list<std::string> l
    return dd;
}

Tango::DeviceData MakeDeviceDataStringArray(const std::vector<std::string> &vec)
{
    return MakeDeviceDataStringArray_impl(vec);
}

Tango::DeviceData MakeDeviceDataStringArray(std::initializer_list<std::string> list = {})
{
    return MakeDeviceDataStringArray_impl(list);
}

Tango::DeviceData MakeDeviceDataString(std::string str)
{
    Tango::DeviceData dd;
@@ -735,4 +746,114 @@ BOOST_AUTO_TEST_CASE(EventsWork)

#endif

BOOST_FIXTURE_TEST_CASE(DbGetDeviceAttributeProperty2Works, AddAndExportDeviceFixture)
{
    const std::vector<std::string> input = {device_name,
                                            "2", // #attributes
                                            "attr0",
                                            "3", // #properties of first attribute
                                            "attr0_prop0",
                                            "1", // # property values: 1 for scalar, > 1 for arrays
                                            "attr0_prop0_scalar_val0",
                                            "attr0_prop1",
                                            "4",
                                            "attr0_prop1_array_val0",
                                            "attr0_prop1_array_val1",
                                            "attr0_prop1_array_val2",
                                            "attr0_prop1_array_val3",
                                            "attr0_prop2",
                                            "1",
                                            "attr0_prop2_scalar_val0",
                                            "attr1",
                                            "1",
                                            "attr1_prop0",
                                            "1",
                                            "attr1_prop0_scalar_val0"};
    // insert some attribute properties
    {
        auto dd = MakeDeviceDataStringArray(input);

        Tango::DeviceData reply;
        BOOST_CHECK_NO_THROW(reply = dp->command_inout("DbPutDeviceAttributeProperty2", dd));
    }

    // all attributes
    {
        auto dd = MakeDeviceDataStringArray({device_name, "attr0", "attr1"});

        Tango::DeviceData reply;
        BOOST_CHECK_NO_THROW(reply = dp->command_inout("DbGetDeviceAttributeProperty2", dd));
        auto vec = ExtractStringVector(reply);

        BOOST_CHECK_EQUAL_COLLECTIONS(std::begin(vec), std::end(vec), std::begin(input), std::end(input));
    }

    // only second attribute
    {
        auto dd = MakeDeviceDataStringArray({device_name, "attr1"});

        Tango::DeviceData reply;
        BOOST_CHECK_NO_THROW(reply = dp->command_inout("DbGetDeviceAttributeProperty2", dd));
        auto vec = ExtractStringVector(reply);

        std::vector<std::string> ref = {device_name, "1", "attr1", "1", "attr1_prop0", "1", "attr1_prop0_scalar_val0"};
        BOOST_CHECK_EQUAL_COLLECTIONS(std::begin(vec), std::end(vec), std::begin(ref), std::end(ref));
    }
}

BOOST_FIXTURE_TEST_CASE(DbGetDevicePipePropertyWorks, AddAndExportDeviceFixture)
{
    const std::vector<std::string> input({device_name,
                                          "2", // #pipes
                                          "pipe0",
                                          "3", // #properties of first pipe
                                          "pipe0_prop0",
                                          "1", // # property values: 1 for scalar, > 1 for arrays
                                          "pipe0_prop0_scalar_val0",
                                          "pipe0_prop1",
                                          "4",
                                          "pipe0_prop1_array_val0",
                                          "pipe0_prop1_array_val1",
                                          "pipe0_prop1_array_val2",
                                          "pipe0_prop1_array_val3",
                                          "pipe0_prop2",
                                          "1",
                                          "pipe0_prop2_scalar_val0",
                                          "pipe1",
                                          "1",
                                          "pipe1_prop0",
                                          "1",
                                          "pipe1_prop0_scalar_val0"});

    // insert some class properties
    {
        auto dd = MakeDeviceDataStringArray(input);
        Tango::DeviceData reply;
        BOOST_CHECK_NO_THROW(reply = dp->command_inout("DbPutDevicePipeProperty", dd));
    }

    // all pipes
    {
        auto dd = MakeDeviceDataStringArray({device_name, "pipe0", "pipe1"});

        Tango::DeviceData reply;
        BOOST_CHECK_NO_THROW(reply = dp->command_inout("DbGetDevicePipeProperty", dd));
        auto vec = ExtractStringVector(reply);

        BOOST_CHECK_EQUAL_COLLECTIONS(std::begin(vec), std::end(vec), std::begin(input), std::end(input));
    }

    // only second pipe
    {
        auto dd = MakeDeviceDataStringArray({device_name, "pipe1"});

        Tango::DeviceData reply;
        BOOST_CHECK_NO_THROW(reply = dp->command_inout("DbGetDevicePipeProperty", dd));
        auto vec = ExtractStringVector(reply);

        std::vector<std::string> ref = {device_name, "1", "pipe1", "1", "pipe1_prop0", "1", "pipe1_prop0_scalar_val0"};
        BOOST_CHECK_EQUAL_COLLECTIONS(std::begin(vec), std::end(vec), std::begin(ref), std::end(ref));
    }
}

BOOST_AUTO_TEST_SUITE_END() // AllTests