fix: improve code consistency and warning settings across multiple files

This commit is contained in:
MechSlayer 2025-09-11 07:01:02 +02:00
parent 4c4eb7e620
commit 2ed55205d3
14 changed files with 131 additions and 162 deletions

View file

@ -70,6 +70,19 @@ if (UNIX)
endif () endif ()
endif () endif ()
target_compile_options(${MODULE_NAME} PRIVATE
-Wall -Wextra -Werror
-Wunused-value
-Wno-reserved-macro-identifier
-Wno-reserved-identifier
-Wno-unused-macros
-Wno-unused-variable
-Wno-undef
-Wno-gnu-statement-expression-from-macro-expansion
-Wno-unsafe-buffer-usage
-Wno-declaration-after-statement
-Wno-switch-default
)
set_target_properties(${MODULE_NAME} PROPERTIES LINKER_LANGUAGE C) set_target_properties(${MODULE_NAME} PROPERTIES LINKER_LANGUAGE C)
target_include_directories(${MODULE_NAME} target_include_directories(${MODULE_NAME}

View file

@ -1,7 +1,7 @@
#pragma once #pragma once
#include "platform.h" #include "platform.h"
#include <stdint.h>
#include <stddef.h> #include <stddef.h>
#include <stdint.h>
DRANG_BEGIN_DECLS DRANG_BEGIN_DECLS
@ -11,10 +11,8 @@ typedef struct drang_uuid
uint64_t low; uint64_t low;
} drang_uuid_t; } drang_uuid_t;
DRANG_PLATFORM_API int drang_uuid_generate(drang_uuid_t *out_uuid);
DRANG_PLATFORM_API int drang_uuid_to_string(const drang_uuid_t *uuid, char *out_str, size_t str_size);
DRANG_PLATFORM_API int drang_uuid_generate(drang_uuid_t* out_uuid); DRANG_PLATFORM_API int drang_uuid_from_string(const char *str, size_t str_size, drang_uuid_t *out_uuid);
DRANG_PLATFORM_API int drang_uuid_to_string(const drang_uuid_t* uuid, char* out_str, size_t str_size);
DRANG_PLATFORM_API int drang_uuid_from_string(const char* str, size_t str_size, drang_uuid_t* out_uuid);
DRANG_END_DECLS DRANG_END_DECLS

View file

@ -5,9 +5,9 @@
#include <drang/fs.h> #include <drang/fs.h>
#include <errno.h> #include <errno.h>
#include <fcntl.h> #include <fcntl.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <stdlib.h>
int drang_fs_mkdir(const char *path, drang_fs_permissions_t permissions) int drang_fs_mkdir(const char *path, drang_fs_permissions_t permissions)
{ {
@ -130,7 +130,7 @@ int drang_fs_get_cwd(char *buffer, size_t size, size_t *out_size)
{ {
DRANG_BEGIN_TRY() DRANG_BEGIN_TRY()
DRANG_CHECK((buffer != NULL && size > 0) || (buffer == NULL && size == 0), DRANG_EINVAL); DRANG_CHECK((buffer != NULL && size > 0) || (buffer == NULL && size == 0), DRANG_EINVAL);
char* dir = get_current_dir_name(); char *dir = get_current_dir_name();
if (dir != NULL) { if (dir != NULL) {
const size_t dir_length = strlen(dir); const size_t dir_length = strlen(dir);
if (buffer != NULL && size < dir_length + 1) { if (buffer != NULL && size < dir_length + 1) {

View file

@ -7,14 +7,14 @@ int drang_uuid_generate(drang_uuid_t *out_uuid)
uuid_generate_random(linux_uuid); uuid_generate_random(linux_uuid);
// Convert to our format (UUID is stored as big-endian bytes) // Convert to our format (UUID is stored as big-endian bytes)
out_uuid->high = ((uint64_t)linux_uuid[0] << 56) | ((uint64_t)linux_uuid[1] << 48) | out_uuid->high = ((uint64_t) linux_uuid[0] << 56) | ((uint64_t) linux_uuid[1] << 48)
((uint64_t)linux_uuid[2] << 40) | ((uint64_t)linux_uuid[3] << 32) | | ((uint64_t) linux_uuid[2] << 40) | ((uint64_t) linux_uuid[3] << 32)
((uint64_t)linux_uuid[4] << 24) | ((uint64_t)linux_uuid[5] << 16) | | ((uint64_t) linux_uuid[4] << 24) | ((uint64_t) linux_uuid[5] << 16)
((uint64_t)linux_uuid[6] << 8) | ((uint64_t)linux_uuid[7]); | ((uint64_t) linux_uuid[6] << 8) | ((uint64_t) linux_uuid[7]);
out_uuid->low = ((uint64_t)linux_uuid[8] << 56) | ((uint64_t)linux_uuid[9] << 48) | out_uuid->low = ((uint64_t) linux_uuid[8] << 56) | ((uint64_t) linux_uuid[9] << 48)
((uint64_t)linux_uuid[10] << 40) | ((uint64_t)linux_uuid[11] << 32) | | ((uint64_t) linux_uuid[10] << 40) | ((uint64_t) linux_uuid[11] << 32)
((uint64_t)linux_uuid[12] << 24) | ((uint64_t)linux_uuid[13] << 16) | | ((uint64_t) linux_uuid[12] << 24) | ((uint64_t) linux_uuid[13] << 16)
((uint64_t)linux_uuid[14] << 8) | ((uint64_t)linux_uuid[15]); | ((uint64_t) linux_uuid[14] << 8) | ((uint64_t) linux_uuid[15]);
return DRANG_EOK; return DRANG_EOK;
} }

View file

@ -5,7 +5,7 @@
int drang_cond_new(struct drang_cond **cond) int drang_cond_new(struct drang_cond **cond)
{ {
struct drang_cond *c = NULL; struct drang_cond *c = NULL;
DRANG_BEGIN_TRY(); DRANG_BEGIN_TRY()
DRANG_CHECK(cond != NULL, DRANG_EINVAL); DRANG_CHECK(cond != NULL, DRANG_EINVAL);
@ -21,7 +21,7 @@ int drang_cond_new(struct drang_cond **cond)
drang_free(c); drang_free(c);
} }
} }
DRANG_END_TRY(); DRANG_END_TRY()
} }
void drang_cond_free(struct drang_cond *cond) void drang_cond_free(struct drang_cond *cond)

View file

@ -5,7 +5,7 @@
int drang_mutex_new(struct drang_mutex **mutex) int drang_mutex_new(struct drang_mutex **mutex)
{ {
struct drang_mutex *m = NULL; struct drang_mutex *m = NULL;
DRANG_BEGIN_TRY(); DRANG_BEGIN_TRY()
DRANG_CHECK(mutex != NULL, DRANG_EINVAL); DRANG_CHECK(mutex != NULL, DRANG_EINVAL);

View file

@ -5,7 +5,7 @@
int drang_rwlock_new(struct drang_rwlock **rwlock) int drang_rwlock_new(struct drang_rwlock **rwlock)
{ {
struct drang_rwlock *rw = NULL; struct drang_rwlock *rw = NULL;
DRANG_BEGIN_TRY(); DRANG_BEGIN_TRY()
DRANG_CHECK(rwlock != NULL, DRANG_EINVAL); DRANG_CHECK(rwlock != NULL, DRANG_EINVAL);
@ -21,7 +21,7 @@ int drang_rwlock_new(struct drang_rwlock **rwlock)
drang_free(rw); drang_free(rw);
} }
} }
DRANG_END_TRY(); DRANG_END_TRY()
} }
void drang_rwlock_free(struct drang_rwlock *rwlock) void drang_rwlock_free(struct drang_rwlock *rwlock)

View file

@ -1,5 +1,5 @@
#include "drang/error.h" #include "drang/error.h"
#include <ctype.h>
#include <drang/uuid.h> #include <drang/uuid.h>
#include <stdio.h> #include <stdio.h>
int drang_uuid_to_string(const drang_uuid_t *uuid, char *out_str, size_t str_size) int drang_uuid_to_string(const drang_uuid_t *uuid, char *out_str, size_t str_size)
@ -7,136 +7,97 @@ int drang_uuid_to_string(const drang_uuid_t *uuid, char *out_str, size_t str_siz
uint8_t bytes[16]; uint8_t bytes[16];
// Convert back to bytes for string formatting // Convert back to bytes for string formatting
for (int i = 0; i < 8; i++) { for (int i = 0; i < 8; i++) {
bytes[i] = (uint8_t)(uuid->high >> (56 - i * 8)); bytes[i] = (uint8_t) (uuid->high >> (56 - i * 8));
bytes[i + 8] = (uint8_t)(uuid->low >> (56 - i * 8)); bytes[i + 8] = (uint8_t) (uuid->low >> (56 - i * 8));
} }
return snprintf(out_str, str_size, "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x", return snprintf(out_str,
bytes[0], bytes[1], bytes[2], bytes[3], str_size,
bytes[4], bytes[5], bytes[6], bytes[7], "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x",
bytes[8], bytes[9], bytes[10], bytes[11], bytes[0],
bytes[12], bytes[13], bytes[14], bytes[15]); bytes[1],
bytes[2],
bytes[3],
bytes[4],
bytes[5],
bytes[6],
bytes[7],
bytes[8],
bytes[9],
bytes[10],
bytes[11],
bytes[12],
bytes[13],
bytes[14],
bytes[15]);
} }
static int hex_char_to_value(char c) { static int hex_char_to_value(char c, int *out)
if (c >= '0' && c <= '9') return c - '0'; {
if (c >= 'a' && c <= 'f') return c - 'a' + 10; DRANG_BEGIN_TRY()
if (c >= 'A' && c <= 'F') return c - 'A' + 10; if (c >= '0' && c <= '9') {
return -1; DRANG_RETURN_IN(out, c - '0');
}
static int parse_hex_byte(const char *str, uint8_t *byte) {
int high = hex_char_to_value(str[0]);
int low = hex_char_to_value(str[1]);
if (high < 0 || low < 0) {
return -1;
} }
if (c >= 'a' && c <= 'f') {
DRANG_RETURN_IN(out, c - 'a' + 10);
}
if (c >= 'A' && c <= 'F') {
DRANG_RETURN_IN(out, c - 'A' + 10);
}
DRANG_FAIL(DRANG_EINVAL);
DRANG_END_TRY_IGNORE()
}
*byte = (uint8_t)((high << 4) | low); static int parse_hex_byte(const char *str, uint8_t *byte)
return 0; {
DRANG_BEGIN_TRY()
int high = 0;
int low = 0;
DRANG_TRY(hex_char_to_value(str[0], &high));
DRANG_TRY(hex_char_to_value(str[1], &low));
DRANG_RETURN_IN(byte, (uint8_t) ((high << 4) | low));
DRANG_END_TRY_IGNORE()
} }
int drang_uuid_from_string(const char *str, size_t str_size, drang_uuid_t *out_uuid) int drang_uuid_from_string(const char *str, size_t str_size, drang_uuid_t *out_uuid)
{ {
DRANG_BEGIN_TRY() DRANG_BEGIN_TRY()
DRANG_CHECK(str, DRANG_EINVAL); DRANG_CHECK(str != NULL, DRANG_EINVAL);
DRANG_CHECK(out_uuid, DRANG_EINVAL); DRANG_CHECK(out_uuid != NULL, DRANG_EINVAL);
// Work with a copy to handle different formats // Expected format: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" (36 characters)
char normalized[37] = {0}; // 36 chars + null terminator DRANG_CHECK(str_size >= 36, DRANG_ENOMEM);
const char *src = str;
char *dst = normalized;
int hex_count = 0;
// Skip leading brace if present // Check for proper hyphen positions
if (*src == '{') { DRANG_CHECK(str[8] == '-' && str[13] == '-' && str[18] == '-' && str[23] == '-', DRANG_EINVAL);
src++;
}
// Copy only hex digits and hyphens, convert to lowercase
while (*src && dst < normalized + 36) {
if (isxdigit(*src)) {
*dst++ = (char)tolower(*src);
hex_count++;
} else if (*src == '-') {
*dst++ = '-';
} else if (*src == '}' && *(src + 1) == '\0') {
// Allow trailing brace
break;
} else if (!isspace(*src)) {
// Invalid character (ignoring whitespace)
DRANG_FAIL(DRANG_EINVAL);
}
src++;
}
// Must have exactly 32 hex digits
DRANG_CHECK(hex_count == 32, DRANG_EINVAL);
// Determine format and validate
const int len = (int)(dst - normalized);
int has_hyphens = 0;
if (len == 36) {
// Standard format with hyphens: 8-4-4-4-12
if (normalized[8] != '-' || normalized[13] != '-' ||
normalized[18] != '-' || normalized[23] != '-') {
DRANG_FAIL(DRANG_EINVAL);
}
has_hyphens = 1;
} else if (len == 32) {
// No hyphens format
has_hyphens = 0;
} else {
DRANG_FAIL(DRANG_EINVAL);
}
// Parse the hex digits into bytes
uint8_t bytes[16]; uint8_t bytes[16];
const char *hex_positions[16]; int byte_idx = 0;
if (has_hyphens) { // Parse each hex pair, skipping hyphens
// Standard format positions for (int i = 0; i < 36 && byte_idx < 16; i += 2) {
hex_positions[0] = &normalized[0]; // 8 chars: time_low // Skip hyphens
hex_positions[1] = &normalized[2]; if (str[i] == '-') {
hex_positions[2] = &normalized[4]; i -= 1; // Compensate for the loop increment
hex_positions[3] = &normalized[6]; continue;
hex_positions[4] = &normalized[9]; // 4 chars: time_mid
hex_positions[5] = &normalized[11];
hex_positions[6] = &normalized[14]; // 4 chars: time_hi_and_version
hex_positions[7] = &normalized[16];
hex_positions[8] = &normalized[19]; // 4 chars: clock_seq_and_reserved + clock_seq_low
hex_positions[9] = &normalized[21];
hex_positions[10] = &normalized[24]; // 12 chars: node
hex_positions[11] = &normalized[26];
hex_positions[12] = &normalized[28];
hex_positions[13] = &normalized[30];
hex_positions[14] = &normalized[32];
hex_positions[15] = &normalized[34];
} else {
// No hyphens format
for (int i = 0; i < 16; i++) {
hex_positions[i] = &normalized[i * 2];
} }
DRANG_TRY(parse_hex_byte(&str[i], &bytes[byte_idx]));
byte_idx++;
} }
// Convert hex pairs to bytes // Ensure we parsed exactly 16 bytes
for (int i = 0; i < 16; i++) { DRANG_CHECK(byte_idx == 16, DRANG_EINVAL);
DRANG_CHECK(parse_hex_byte(hex_positions[i], &bytes[i]) == 0, DRANG_EINVAL); // Convert bytes to high and low uint64_t values
out_uuid->high = 0;
out_uuid->low = 0;
for (int i = 0; i < 8; i++) {
out_uuid->high |= ((uint64_t) bytes[i]) << (56 - i * 8);
out_uuid->low |= ((uint64_t) bytes[i + 8]) << (56 - i * 8);
} }
// Convert bytes to uint64_t values
out_uuid->high = ((uint64_t)bytes[0] << 56) | ((uint64_t)bytes[1] << 48) |
((uint64_t)bytes[2] << 40) | ((uint64_t)bytes[3] << 32) |
((uint64_t)bytes[4] << 24) | ((uint64_t)bytes[5] << 16) |
((uint64_t)bytes[6] << 8) | ((uint64_t)bytes[7]);
out_uuid->low = ((uint64_t)bytes[8] << 56) | ((uint64_t)bytes[9] << 48) |
((uint64_t)bytes[10] << 40) | ((uint64_t)bytes[11] << 32) |
((uint64_t)bytes[12] << 24) | ((uint64_t)bytes[13] << 16) |
((uint64_t)bytes[14] << 8) | ((uint64_t)bytes[15]);
DRANG_END_TRY_IGNORE() DRANG_END_TRY_IGNORE()
} }

View file

@ -357,11 +357,8 @@ bool drang_fs_exists(const char *path)
if (path == NULL) if (path == NULL)
return false; return false;
const DWORD attrs = GetFileAttributesA(path); const DWORD attrs = GetFileAttributesA(path);
if (attrs == INVALID_FILE_ATTRIBUTES) {
false;
}
return true; return attrs != INVALID_FILE_ATTRIBUTES;
} }
int drang_fs_stat(const char *path, struct drang_fs_stat *out_stat) int drang_fs_stat(const char *path, struct drang_fs_stat *out_stat)

View file

@ -15,7 +15,7 @@ size_t drang_cond_alignment(void)
int drang_cond_init(struct drang_cond *cond) int drang_cond_init(struct drang_cond *cond)
{ {
DRANG_BEGIN_TRY(); DRANG_BEGIN_TRY()
DRANG_CHECK(cond != NULL, DRANG_EINVAL); DRANG_CHECK(cond != NULL, DRANG_EINVAL);
DRANG_CHECK(!cond->initialized, DRANG_EBUSY); DRANG_CHECK(!cond->initialized, DRANG_EBUSY);
@ -23,7 +23,7 @@ int drang_cond_init(struct drang_cond *cond)
InitializeConditionVariable(&cond->cv); InitializeConditionVariable(&cond->cv);
cond->initialized = true; cond->initialized = true;
DRANG_END_TRY_IGNORE(); DRANG_END_TRY_IGNORE()
} }
void drang_cond_fini(struct drang_cond *cond) void drang_cond_fini(struct drang_cond *cond)
@ -38,26 +38,26 @@ void drang_cond_fini(struct drang_cond *cond)
int drang_cond_signal(struct drang_cond *cond) int drang_cond_signal(struct drang_cond *cond)
{ {
DRANG_BEGIN_TRY(); DRANG_BEGIN_TRY()
DRANG_CHECK(cond != NULL, DRANG_EINVAL); DRANG_CHECK(cond != NULL, DRANG_EINVAL);
DRANG_CHECK(cond->initialized, DRANG_EINVAL); DRANG_CHECK(cond->initialized, DRANG_EINVAL);
WakeConditionVariable(&cond->cv); WakeConditionVariable(&cond->cv);
DRANG_END_TRY_IGNORE(); DRANG_END_TRY_IGNORE()
} }
int drang_cond_broadcast(struct drang_cond *cond) int drang_cond_broadcast(struct drang_cond *cond)
{ {
DRANG_BEGIN_TRY(); DRANG_BEGIN_TRY()
DRANG_CHECK(cond != NULL, DRANG_EINVAL); DRANG_CHECK(cond != NULL, DRANG_EINVAL);
DRANG_CHECK(cond->initialized, DRANG_EINVAL); DRANG_CHECK(cond->initialized, DRANG_EINVAL);
WakeAllConditionVariable(&cond->cv); WakeAllConditionVariable(&cond->cv);
DRANG_END_TRY_IGNORE(); DRANG_END_TRY_IGNORE()
} }
int drang_cond_wait(struct drang_cond *cond, struct drang_mutex *mutex) int drang_cond_wait(struct drang_cond *cond, struct drang_mutex *mutex)
@ -70,7 +70,7 @@ int drang_cond_timedwait(struct drang_cond *cond, struct drang_mutex *mutex, uin
DWORD timeout = (timeout_ms == 0) ? INFINITE : (DWORD) timeout_ms; DWORD timeout = (timeout_ms == 0) ? INFINITE : (DWORD) timeout_ms;
BOOL result; BOOL result;
DRANG_BEGIN_TRY(); DRANG_BEGIN_TRY()
DRANG_CHECK(cond != NULL, DRANG_EINVAL); DRANG_CHECK(cond != NULL, DRANG_EINVAL);
DRANG_CHECK(cond->initialized, DRANG_EINVAL); DRANG_CHECK(cond->initialized, DRANG_EINVAL);
@ -85,5 +85,5 @@ int drang_cond_timedwait(struct drang_cond *cond, struct drang_mutex *mutex, uin
DRANG_FAIL(DRANG_EINVAL); // Generic error for other failures DRANG_FAIL(DRANG_EINVAL); // Generic error for other failures
} }
DRANG_END_TRY_IGNORE(); DRANG_END_TRY_IGNORE()
} }

View file

@ -1,8 +1,8 @@
#pragma once #pragma once
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#include <stdbool.h> #include <stdbool.h>
#include <windows.h>
struct drang_mutex struct drang_mutex
{ {

View file

@ -14,7 +14,7 @@ size_t drang_mutex_alignment(void)
int drang_mutex_init(struct drang_mutex *mutex) int drang_mutex_init(struct drang_mutex *mutex)
{ {
DRANG_BEGIN_TRY(); DRANG_BEGIN_TRY()
DRANG_CHECK(mutex != NULL, DRANG_EINVAL); DRANG_CHECK(mutex != NULL, DRANG_EINVAL);
DRANG_CHECK(!mutex->initialized, DRANG_EBUSY); DRANG_CHECK(!mutex->initialized, DRANG_EBUSY);
@ -22,7 +22,7 @@ int drang_mutex_init(struct drang_mutex *mutex)
InitializeCriticalSection(&mutex->cs); InitializeCriticalSection(&mutex->cs);
mutex->initialized = true; mutex->initialized = true;
DRANG_END_TRY_IGNORE(); DRANG_END_TRY_IGNORE()
} }
void drang_mutex_fini(struct drang_mutex *mutex) void drang_mutex_fini(struct drang_mutex *mutex)
@ -37,19 +37,19 @@ void drang_mutex_fini(struct drang_mutex *mutex)
int drang_mutex_lock(struct drang_mutex *mutex) int drang_mutex_lock(struct drang_mutex *mutex)
{ {
DRANG_BEGIN_TRY(); DRANG_BEGIN_TRY()
DRANG_CHECK(mutex != NULL, DRANG_EINVAL); DRANG_CHECK(mutex != NULL, DRANG_EINVAL);
DRANG_CHECK(mutex->initialized, DRANG_EINVAL); DRANG_CHECK(mutex->initialized, DRANG_EINVAL);
EnterCriticalSection(&mutex->cs); EnterCriticalSection(&mutex->cs);
DRANG_END_TRY_IGNORE(); DRANG_END_TRY_IGNORE()
} }
int drang_mutex_unlock(struct drang_mutex *mutex) int drang_mutex_unlock(struct drang_mutex *mutex)
{ {
DRANG_BEGIN_TRY(); DRANG_BEGIN_TRY()
DRANG_CHECK(mutex != NULL, DRANG_EINVAL); DRANG_CHECK(mutex != NULL, DRANG_EINVAL);
DRANG_CHECK(mutex->initialized, DRANG_EINVAL); DRANG_CHECK(mutex->initialized, DRANG_EINVAL);
@ -58,5 +58,5 @@ int drang_mutex_unlock(struct drang_mutex *mutex)
DRANG_RETURN(); DRANG_RETURN();
DRANG_END_TRY_IGNORE(); DRANG_END_TRY_IGNORE()
} }

View file

@ -14,7 +14,7 @@ size_t drang_rwlock_alignment(void)
int drang_rwlock_init(struct drang_rwlock *rwlock) int drang_rwlock_init(struct drang_rwlock *rwlock)
{ {
DRANG_BEGIN_TRY(); DRANG_BEGIN_TRY()
DRANG_CHECK(rwlock != NULL, DRANG_EINVAL); DRANG_CHECK(rwlock != NULL, DRANG_EINVAL);
DRANG_CHECK(!rwlock->initialized, DRANG_EBUSY); DRANG_CHECK(!rwlock->initialized, DRANG_EBUSY);
@ -22,7 +22,7 @@ int drang_rwlock_init(struct drang_rwlock *rwlock)
InitializeSRWLock(&rwlock->srw); InitializeSRWLock(&rwlock->srw);
rwlock->initialized = true; rwlock->initialized = true;
DRANG_END_TRY_IGNORE(); DRANG_END_TRY_IGNORE()
} }
void drang_rwlock_fini(struct drang_rwlock *rwlock) void drang_rwlock_fini(struct drang_rwlock *rwlock)
@ -37,48 +37,48 @@ void drang_rwlock_fini(struct drang_rwlock *rwlock)
int drang_rwlock_rdlock(struct drang_rwlock *rwlock) int drang_rwlock_rdlock(struct drang_rwlock *rwlock)
{ {
DRANG_BEGIN_TRY(); DRANG_BEGIN_TRY()
DRANG_CHECK(rwlock != NULL, DRANG_EINVAL); DRANG_CHECK(rwlock != NULL, DRANG_EINVAL);
DRANG_CHECK(rwlock->initialized, DRANG_EINVAL); DRANG_CHECK(rwlock->initialized, DRANG_EINVAL);
AcquireSRWLockShared(&rwlock->srw); AcquireSRWLockShared(&rwlock->srw);
DRANG_END_TRY_IGNORE(); DRANG_END_TRY_IGNORE()
} }
int drang_rwlock_wrlock(struct drang_rwlock *rwlock) int drang_rwlock_wrlock(struct drang_rwlock *rwlock)
{ {
DRANG_BEGIN_TRY(); DRANG_BEGIN_TRY()
DRANG_CHECK(rwlock != NULL, DRANG_EINVAL); DRANG_CHECK(rwlock != NULL, DRANG_EINVAL);
DRANG_CHECK(rwlock->initialized, DRANG_EINVAL); DRANG_CHECK(rwlock->initialized, DRANG_EINVAL);
AcquireSRWLockExclusive(&rwlock->srw); AcquireSRWLockExclusive(&rwlock->srw);
DRANG_END_TRY_IGNORE(); DRANG_END_TRY_IGNORE()
} }
int drang_rwlock_rdunlock(struct drang_rwlock *rwlock) int drang_rwlock_rdunlock(struct drang_rwlock *rwlock)
{ {
DRANG_BEGIN_TRY(); DRANG_BEGIN_TRY()
DRANG_CHECK(rwlock != NULL, DRANG_EINVAL); DRANG_CHECK(rwlock != NULL, DRANG_EINVAL);
DRANG_CHECK(rwlock->initialized, DRANG_EINVAL); DRANG_CHECK(rwlock->initialized, DRANG_EINVAL);
ReleaseSRWLockShared(&rwlock->srw); ReleaseSRWLockShared(&rwlock->srw);
DRANG_END_TRY_IGNORE(); DRANG_END_TRY_IGNORE()
} }
int drang_rwlock_wrunlock(struct drang_rwlock *rwlock) int drang_rwlock_wrunlock(struct drang_rwlock *rwlock)
{ {
DRANG_BEGIN_TRY(); DRANG_BEGIN_TRY()
DRANG_CHECK(rwlock != NULL, DRANG_EINVAL); DRANG_CHECK(rwlock != NULL, DRANG_EINVAL);
DRANG_CHECK(rwlock->initialized, DRANG_EINVAL); DRANG_CHECK(rwlock->initialized, DRANG_EINVAL);
ReleaseSRWLockExclusive(&rwlock->srw); ReleaseSRWLockExclusive(&rwlock->srw);
DRANG_END_TRY_IGNORE(); DRANG_END_TRY_IGNORE()
} }

View file

@ -13,7 +13,7 @@ int drang_uuid_generate(drang_uuid_t *out_uuid)
} }
// Convert Windows UUID to our format // Convert Windows UUID to our format
// Windows UUID is stored in mixed-endian format // Windows UUID is stored in mixed-endian format
out_uuid->high = ((uint64_t)win_uuid.Data1 << 32) | ((uint64_t)win_uuid.Data2 << 16) | win_uuid.Data3; out_uuid->high = ((uint64_t) win_uuid.Data1 << 32) | ((uint64_t) win_uuid.Data2 << 16) | win_uuid.Data3;
out_uuid->low = 0; out_uuid->low = 0;
for (int i = 0; i < 8; ++i) { for (int i = 0; i < 8; ++i) {
out_uuid->low = (out_uuid->low << 8) | win_uuid.Data4[i]; out_uuid->low = (out_uuid->low << 8) | win_uuid.Data4[i];