From cd53d13fd12f8dd86514b2894e62ee6612566975 Mon Sep 17 00:00:00 2001 From: open-license-manager <rillf@maildrop.cc> Date: 周一, 04 8月 2014 00:38:17 +0800 Subject: [PATCH] linux tests ok --- src/library/pc-identifiers.c | 131 ++++++++++++++----------------------------- 1 files changed, 43 insertions(+), 88 deletions(-) diff --git a/src/library/pc-identifiers.c b/src/library/pc-identifiers.c index 07a362a..891bd82 100644 --- a/src/library/pc-identifiers.c +++ b/src/library/pc-identifiers.c @@ -13,103 +13,55 @@ #include "base/base64.h" #include <valgrind/memcheck.h> -FUNCTION_RETURN generate_ethernet_pc_id(PcIdentifier * identifiers, - unsigned int * num_identifiers, bool use_mac); -static void encodeStrategy(PcIdentifier * identifier, - IDENTIFICATION_STRATEGY strategy); -static FUNCTION_RETURN generate_platform_specific_pc_id( - PcIdentifier * identifiers, unsigned int * num_identifiers); - - static FUNCTION_RETURN generate_default_pc_id(PcIdentifier * identifiers, unsigned int * num_identifiers) { - size_t adapter_num, disk_num, plat_spec_id; - FUNCTION_RETURN result_adapterInfos, result_diskinfos, result_plat_spec; - unsigned int required_id_size, current_identifier, i, j, k; + size_t adapter_num, disk_num; + FUNCTION_RETURN result_adapterInfos, result_diskinfos; + unsigned int required_id_size, i, j, k; DiskInfo * diskInfos; AdapterInfo *adapterInfos; - required_id_size = 0; - //just calculate the number of required identifiers - result_plat_spec = generate_platform_specific_pc_id(NULL, &plat_spec_id); - if (result_plat_spec == OK) { - required_id_size += 1; - } result_adapterInfos = getAdapterInfos(NULL, &adapter_num); + if (result_adapterInfos != OK) { + //call generate_disk_pc_id; + return result_adapterInfos; + } result_diskinfos = getDiskInfos(NULL, &disk_num); - if (result_diskinfos == OK && result_adapterInfos == OK) { - required_id_size += disk_num * adapter_num; - } else if (result_adapterInfos == OK) { - required_id_size += adapter_num; - } else if (result_diskinfos == OK) { - required_id_size += disk_num; + if (result_diskinfos == OK) { + required_id_size = disk_num * adapter_num; + } else { + required_id_size = disk_num; } int defined_identifiers = *num_identifiers; + *num_identifiers = required_id_size; if (identifiers == NULL) { - *num_identifiers = required_id_size; return OK; } else if (required_id_size > defined_identifiers) { return BUFFER_TOO_SMALL; } - - //calculate the identifiers - current_identifier = 0; - if (result_plat_spec == OK) { - generate_platform_specific_pc_id(identifiers, 1); - current_identifier += 1; - } - if (result_diskinfos == OK && result_adapterInfos == OK) { - diskInfos = (DiskInfo*) malloc(disk_num * sizeof(DiskInfo)); - result_diskinfos = getDiskInfos(diskInfos, &disk_num); - adapterInfos = (AdapterInfo*) malloc(adapter_num * sizeof(AdapterInfo)); - result_adapterInfos = getAdapterInfos(adapterInfos, &adapter_num); - for (i = 0; i < disk_num; i++) { - for (j = 0; j < adapter_num; j++) { - if (current_identifier > defined_identifiers) { - break; - } - for (k = 0; k < 6; k++) { - identifiers[current_identifier][k] = diskInfos[i].disk_sn[k - + 2] ^ adapterInfos[j].mac_address[k + 2]; - } - encodeStrategy(&identifiers[current_identifier], DEFAULT); - current_identifier++; - } + diskInfos = (DiskInfo*) malloc(disk_num * sizeof(DiskInfo)); + result_diskinfos = getDiskInfos(diskInfos, &disk_num); + adapterInfos = (AdapterInfo*) malloc(adapter_num * sizeof(AdapterInfo)); + result_adapterInfos = getAdapterInfos(adapterInfos, &adapter_num); + for (i = 0; i < disk_num; i++) { + for (j = 0; j < adapter_num; j++) { + for (k = 0; k < 6; k++) + identifiers[i * adapter_num + j][k] = + diskInfos[i].disk_sn[k + 2] + ^ adapterInfos[j].mac_address[k + 2]; } - free(diskInfos); - free(adapterInfos); - } else if (result_adapterInfos == OK) { - i=defined_identifiers-current_identifier; - return generate_ethernet_pc_id(&identifiers[current_identifier], - &i, true); - } else if (result_diskinfos == OK) { - i=defined_identifiers-current_identifier; - return generate_disk_pc_id(&identifiers[current_identifier], - &i, false); } + free(diskInfos); + free(adapterInfos); return OK; -} - -static void encodeStrategy(PcIdentifier * identifier, - IDENTIFICATION_STRATEGY strategy) { - unsigned char strategy_num = strategy << 5; - identifier[0][0] = (identifier[0][0] & 15) - - ++ | strategy_num; - -} - -static FUNCTION_RETURN generate_platform_specific_pc_id( - * identifiers, unsigned int * num_identifiers) { - } static FUNCTION_RETURN generate_ethernet_pc_id(PcIdentifier * identifiers, unsigned int * num_identifiers, bool use_mac) { size_t adapters; FUNCTION_RETURN result_adapterInfos; - unsigned int j, k; + unsigned int i, j, k; AdapterInfo *adapterInfos; result_adapterInfos = getAdapterInfos(NULL, &adapters); @@ -147,9 +99,9 @@ static FUNCTION_RETURN generate_disk_pc_id(PcIdentifier * identifiers, unsigned int * num_identifiers, bool use_label) { - size_t disk_num, available_disk_info = 0; + size_t disk_num, available_disk_info=0; FUNCTION_RETURN result_diskinfos; - unsigned int i, j; + unsigned int i, k, j; char firstChar; DiskInfo * diskInfos; @@ -158,7 +110,7 @@ return result_diskinfos; } diskInfos = (DiskInfo*) malloc(disk_num * sizeof(DiskInfo)); -//memset(diskInfos,0,disk_num * sizeof(DiskInfo)); + //memset(diskInfos,0,disk_num * sizeof(DiskInfo)); result_diskinfos = getDiskInfos(diskInfos, &disk_num); if (result_diskinfos != OK) { free(diskInfos); @@ -179,19 +131,17 @@ return BUFFER_TOO_SMALL; } - j = 0; + j=0; for (i = 0; i < disk_num; i++) { - if (use_label) { - if (diskInfos[i].label[0] != 0) { - memset(identifiers[j], 0, sizeof(PcIdentifier)); //!!!!!!! - strncpy(identifiers[j], diskInfos[i].label, - sizeof(PcIdentifier)); + if(use_label){ + if(diskInfos[i].label[0]!=0){ + memset(identifiers[j],0,sizeof(PcIdentifier)); //!!!!!!! + strncpy(identifiers[j],diskInfos[i].label,sizeof(PcIdentifier)); j++; } - } else { - if (diskInfos[i].disk_sn[0] != 0) { - memcpy(identifiers[j], &diskInfos[i].disk_sn[2], - sizeof(PcIdentifier)); + }else{ + if(diskInfos[i].disk_sn[0]!=0){ + memcpy(identifiers[j],&diskInfos[i].disk_sn[2],sizeof(PcIdentifier)); j++; } } @@ -234,14 +184,19 @@ case DISK_NUM: result = generate_disk_pc_id(identifiers, array_size, false); break; - case PLATFORM_SPECIFIC: - result = generate_platform_specific_pc_id(identifiers, array_size); + case DISK_LABEL: + result = generate_disk_pc_id(identifiers, array_size, true); break; default: return ERROR; } if (result == OK && identifiers != NULL) { + strategy_num = strategy << 5; + for (i = 0; i < *array_size; i++) { + //encode strategy in the first three bits of the pc_identifier + identifiers[i][0] = (identifiers[i][0] & 15) | strategy_num; + } //fill array if larger for (i = *array_size; i < original_array_size; i++) { identifiers[i][0] = STRATEGY_UNKNOWN << 5; -- Gitblit v1.9.1