| | |
| | | #include <netdb.h> |
| | | #include <ifaddrs.h> |
| | | #include <stdio.h> |
| | | #include <ctype.h> |
| | | #include <stdlib.h> |
| | | #include <unistd.h> |
| | | #include <linux/if_link.h> |
| | | #include <sys/socket.h> |
| | | #include <netpacket/packet.h> |
| | | |
| | | #include <valgrind/memcheck.h> |
| | | #include <paths.h> |
| | | |
| | | #include <stdlib.h> |
| | |
| | | f_return = BUFFER_TOO_SMALL; |
| | | } |
| | | freeifaddrs(ifaddr); |
| | | free(ifnames); |
| | | return f_return; |
| | | } |
| | | /** |
| | |
| | | size_t len; |
| | | unsigned int i, j; |
| | | char * hexuuid; |
| | | unsigned char cur_character; |
| | | //remove characters not in hex set |
| | | len = strlen(uuid); |
| | | hexuuid = (char *) malloc(sizeof(char) * out_size * 2 + 1); |
| | | for (i = 0, j = 0; j < out_size * 2; i++) { |
| | | if (i < len) { |
| | | if (isxdigit(uuid[i])) { |
| | | hexuuid[j] = uuid[i]; |
| | | j++; |
| | | } else { |
| | | //skip |
| | | continue; |
| | | } |
| | | } else { |
| | | hexuuid[j] = '0'; |
| | | 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; i < len; i++) { |
| | | if (isxdigit(uuid[i])) { |
| | | hexuuid[j] = uuid[i]; |
| | | j++; |
| | | } else { |
| | | //skip |
| | | continue; |
| | | } |
| | | } |
| | | hexuuid[j] = '\0'; |
| | | for (i = 0; i < out_size; i++) { |
| | | sscanf(&hexuuid[i * 2], "%2hhx", &buffer_out[i]); |
| | | if (j % 2 == 1) { |
| | | hexuuid[j++] = '0'; |
| | | } |
| | | hexuuid[j] = '\0'; |
| | | 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; |
| | | } |
| | | |
| | | free(hexuuid); |
| | | } |
| | | |
| | | #define MAX_UNITS 20 |
| | | FUNCTION_RETURN getDiskInfos(DiskInfo * diskInfos, size_t * disk_info_size) { |
| | | struct stat mount_stat, sym_stat; |
| | |
| | | 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) { |
| | |
| | | #ifdef _DEBUG |
| | | printf("Open /dev/disk/by-uuid fail"); |
| | | #endif |
| | | free(statDrives); |
| | | return ERROR; |
| | | } |
| | | |
| | |
| | | if (strcmp(ent->mnt_dir, "/") == 0) { |
| | | strcpy(tmpDrives[drive_found].label, "root"); |
| | | #ifdef _DEBUG |
| | | printf("drive %d set to preferred\n", ent->mnt_fsname); |
| | | printf("drive %s set to preferred\n", ent->mnt_fsname); |
| | | #endif |
| | | tmpDrives[drive_found].preferred = true; |
| | | } |
| | |
| | | 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; |
| | | } |
| | | |