Beispiel #1
0
const char *get_host(Data &p)
{
    IP *ip = (IP*)p.ptr;
    if (ip && ip->host())
        return ip->host();
    return "";
}
Beispiel #2
0
const char *get_host(void *p)
{
    IP *ip = (IP*)p;
    if (ip && ip->host())
        return ip->host();
    return "";
}
Beispiel #3
0
EXPORT string save_data(const DataDef *def, void *data)
{
    string res;
    unsigned offs = 0;
    for (; def->name; def++){
        string value;
        bool bSave = false;
        unsigned i;
        if (def->type == DATA_STRUCT){
            string s = save_data((DataDef*)(def->def_value), ((char*)data) + offs);
            if (s.length()){
                if (res.length())
                    res += "\n";
                res += s;
            }
        }else  if (*def->name){
            switch (def->type){
            case DATA_IP:{
                    IP *p = *((IP**)(((char*)data) + offs));
                    if (p && p->ip()){
                        struct in_addr inaddr;
                        inaddr.s_addr = p->ip();
                        value = inet_ntoa(inaddr);
                        const char *host = p->host();
                        if (host && *host){
                            value += ",";
                            value += host;
                        }
                        bSave = true;
                    }
                    break;
                }
            case DATA_STRLIST:{
                    STRING_MAP *p = *((STRING_MAP**)(((char*)data) + offs));
                    if (p){
                        for (STRING_MAP::iterator it = p->begin(); it != p->end(); ++it){
                            if (res.length())
                                res += "\n";
                            res += def->name;
                            res += "=";
                            res += number((*it).first);
                            res += ",";
                            res += quoteString((*it).second.c_str());
                        }
                    }
                    break;
                }
            case DATA_UTFLIST:{
                    STRING_MAP *p = *((STRING_MAP**)(((char*)data) + offs));
                    if (p){
                        for (STRING_MAP::iterator it = p->begin(); it != p->end(); ++it){
                            if (res.length())
                                res += "\n";
                            res += def->name;
                            res += "=";
                            res += number((*it).first);
                            res += ",";
                            QString s = QString::fromUtf8((*it).second.c_str());
                            QCString ls = s.local8Bit();
                            if (QString::fromLocal8Bit(ls) == s){
                                res += quoteString((const char*)ls);
                            }else{
                                res += quoteString((const char*)(s.utf8()));
                                res += "u";
                            }
                        }
                    }
                    break;
                }
            case DATA_STRING:{
                    char **p = (char**)(((char*)data) + offs);
                    for (i = 0; i < def->n_values; i++, p++){
                        if (value.length())
                            value += ",";
                        if (def->def_value){
                            if ((*p == NULL) || strcmp(*p, (char*)(def->def_value))){
                                value += quoteString(*p);
                                bSave = true;
                            }
                        }else{
                            if ((*p != NULL) && **p){
                                value += quoteString(*p);
                                bSave = true;
                            }
                        }
                    }
                    break;
                }
            case DATA_UTF:{
                    char **p = (char**)(((char*)data) + offs);
                    for (i = 0; i < def->n_values; i++, p++){
                        if (value.length())
                            value += ",";
                        QString s;
                        if (*p != NULL)
                            s = QString::fromUtf8(*p);
                        if (def->def_value){
                            if (s != i18n((const char*)(def->def_value)))
                                bSave = true;
                        }else{
                            if (s.length())
                                bSave = true;
                        }
                        if (bSave){
                            QCString ls = s.local8Bit();
                            if (QString::fromLocal8Bit(ls) == s){
                                value += quoteString((const char*)ls);
                            }else{
                                value += quoteString((const char*)(s.utf8()));
                                value += "u";
                            }
                        }
                    }
                    break;
                }
            case DATA_BOOL:{
                    unsigned long *p = (unsigned long*)(((char*)data) + offs);
                    for (i = 0; i < def->n_values; i++, p++){
                        if (value.length())
                            value += ",";
                        if ((*p != 0) != (def->def_value != 0)){
                            if (*p){
                                value += "true";
                            }else{
                                value += "false";
                            }
                            bSave = true;
                        }
                    }
                    break;
                }
            case DATA_LONG:{
                    long *p = (long*)(((char*)data) + offs);
                    for (i = 0; i < def->n_values; i++, p++){
                        if (value.length())
                            value += ",";
                        if (*p != (long)(def->def_value)){
                            char b[32];
                            snprintf(b, sizeof(b), "%li", *p);
                            value += b;
                            bSave = true;
                        }
                    }
                    break;
                }
            case DATA_ULONG:{
                    unsigned long *p = (unsigned long*)(((char*)data) + offs);
                    for (i = 0; i < def->n_values; i++, p++){
                        if (value.length())
                            value += ",";
                        if (*p != (unsigned long)(def->def_value)){
                            char b[32];
                            snprintf(b, sizeof(b), "%lu", *p);
                            value += b;
                            bSave = true;
                        }
                    }
                    break;
                }
            }
            if (bSave){
                if (res.length())
                    res += "\n";
                res += def->name;
                res += "=";
                res += value;
            }
        }
        offs += sizeof(void*) * def->n_values;
    }
    return res;
}