| | |
| | | #include <linux/if_link.h> |
| | | #include <sys/socket.h> |
| | | #include <netpacket/packet.h> |
| | | |
| | | #include <valgrind/memcheck.h> |
| | | #include <paths.h> |
| | | |
| | | #include <stdlib.h> |
| | |
| | | perror("getifaddrs"); |
| | | return ERROR; |
| | | } |
| | | |
| | | if (adapterInfos != NULL) { |
| | | memset(adapterInfos, 0, (*adapter_info_size) * sizeof(AdapterInfo)); |
| | | } |
| | | |
| | | /* count the maximum number of interfaces */ |
| | | for (ifa = ifaddr, if_max = 0; ifa != NULL; ifa = ifa->ifa_next, n++) { |
| | | if (ifa->ifa_addr == NULL) { |
| | |
| | | */ |
| | | #ifdef _DEBUG |
| | | s = getnameinfo(ifa->ifa_addr, sizeof(struct sockaddr_in), host, |
| | | NI_MAXHOST, |
| | | NULL, 0, NI_NUMERICHOST); |
| | | NI_MAXHOST, |
| | | NULL, 0, NI_NUMERICHOST); |
| | | if (s != 0) { |
| | | printf("getnameinfo() failed: %s\n", gai_strerror(s)); |
| | | } |
| | |
| | | f_return = BUFFER_TOO_SMALL; |
| | | } |
| | | freeifaddrs(ifaddr); |
| | | free(ifnames); |
| | | return f_return; |
| | | } |
| | | /** |
| | |
| | | size_t len; |
| | | unsigned int i, j; |
| | | char * hexuuid; |
| | | char cur_character; |
| | | unsigned char cur_character; |
| | | //remove characters not in hex set |
| | | len = strlen(uuid); |
| | | hexuuid = (char *) malloc(sizeof(char) * strlen(uuid)); |
| | | memset(buffer_out, 0, out_size); |
| | | memset(hexuuid, 0, sizeof(char) * strlen(uuid)); |
| | | |
| | | for (i = 0, j = 0; j < len; i++) { |
| | | if (isxdigit(uuid[j])) { |
| | | for (i = 0, j = 0; i < len; i++) { |
| | | if (isxdigit(uuid[i])) { |
| | | hexuuid[j] = uuid[i]; |
| | | j++; |
| | | } else { |
| | |
| | | hexuuid[j++] = '0'; |
| | | } |
| | | hexuuid[j] = '\0'; |
| | | for (i = 0; i < j; i++) { |
| | | for (i = 0; i < j / 2; i++) { |
| | | sscanf(&hexuuid[i * 2], "%2hhx", &cur_character); |
| | | buffer_out[i % out_size] = buffer_out[i % out_size] ^ cur_character; |
| | | } |
| | |
| | | /*static char discard[1024]; |
| | | char device[64], name[64], type[64]; |
| | | */ |
| | | char path[MAX_PATH], cur_dir[MAX_PATH]; |
| | | char cur_dir[MAX_PATH]; |
| | | struct mntent *ent; |
| | | |
| | | int maxDrives, currentDrive, i, drive_found; |
| | |
| | | maxDrives = MAX_UNITS; |
| | | tmpDrives = (DiskInfo *) malloc(sizeof(DiskInfo) * maxDrives); |
| | | } |
| | | statDrives = (__ino64_t *) malloc(maxDrives * sizeof(__ino64_t )); |
| | | memset(tmpDrives, 0, sizeof(DiskInfo) * maxDrives); |
| | | statDrives = (__ino64_t *) malloc(maxDrives * sizeof(__ino64_t )); |
| | | memset(statDrives, 0, sizeof(__ino64_t ) * maxDrives); |
| | | ; |
| | | |
| | | aFile = setmntent("/proc/mounts", "r"); |
| | | if (aFile == NULL) { |
| | | /*proc not mounted*/ |
| | | return ERROR; |
| | | } |
| | | |
| | | disk_by_uuid_dir = opendir("/dev/disk/by-uuid"); |
| | | if (disk_by_uuid_dir == NULL) { |
| | | #ifdef _DEBUG |
| | | printf("Open /dev/disk/by-uuid fail"); |
| | | #endif |
| | | return ERROR; |
| | | } |
| | | |
| | |
| | | } |
| | | } |
| | | endmntent(aFile); |
| | | |
| | | if (diskInfos == NULL) { |
| | | *disk_info_size = currentDrive; |
| | | free(tmpDrives); |
| | | result = OK; |
| | | } else if (*disk_info_size >= currentDrive) { |
| | | disk_by_uuid_dir = opendir("/dev/disk/by-uuid"); |
| | | if (disk_by_uuid_dir == NULL) { |
| | | #ifdef _DEBUG |
| | | printf("Open /dev/disk/by-uuid fail"); |
| | | #endif |
| | | free(statDrives); |
| | | return ERROR; |
| | | } |
| | | result = OK; |
| | | *disk_info_size = currentDrive; |
| | | while ((dir = readdir(disk_by_uuid_dir)) != NULL) { |
| | | strcpy(cur_dir, "/dev/disk/by-uuid/"); |
| | | strcat(cur_dir, dir->d_name); |
| | | strncat(cur_dir, dir->d_name, 200); |
| | | if (stat(cur_dir, &sym_stat) == 0) { |
| | | for (i = 0; i < currentDrive; i++) { |
| | | if (sym_stat.st_ino == statDrives[i]) { |
| | | parseUUID(dir->d_name, tmpDrives[i].disk_sn, |
| | | sizeof(tmpDrives[i].disk_sn)); |
| | | #ifdef _DEBUG |
| | | printf("uuid %d %s %s %02x%02x%02x%02x\n", i, |
| | | tmpDrives[i].device, path, |
| | | VALGRIND_CHECK_VALUE_IS_DEFINED(tmpDrives[i].device); |
| | | |
| | | printf("uuid %d %s %02x%02x%02x%02x\n", i, |
| | | tmpDrives[i].device, |
| | | tmpDrives[i].disk_sn[0], |
| | | tmpDrives[i].disk_sn[1], |
| | | tmpDrives[i].disk_sn[2], |
| | |
| | | } |
| | | } |
| | | */ |
| | | free(statDrives); |
| | | return result; |
| | | } |
| | | |