Fixed some things so far. It looks like I can't have __FILE__, etc. turned into wide strings because the way to do so works *ahead of time* :| Have to restructure debug.cpp.

This commit is contained in:
Pietro Gagliardi 2016-04-23 17:31:59 -04:00
parent ee6fa439f7
commit 050cc3aa16
4 changed files with 25 additions and 14 deletions

View File

@ -33,12 +33,15 @@ CFLAGS += \
-bigobj -nologo \ -bigobj -nologo \
-RTC1 -RTCc -RTCs -RTCu -RTC1 -RTCc -RTCs -RTCu
# TODO prune these
# -EHsc is to shut the compiler up in some cases
CXXFLAGS += \ CXXFLAGS += \
-W4 \ -W4 \
-wd4100 \ -wd4100 \
-TP \ -TP \
-bigobj -nologo \ -bigobj -nologo \
-RTC1 -RTCc -RTCs -RTCu -RTC1 -RTCc -RTCs -RTCu \
-EHsc
# TODO warnings on undefined symbols # TODO warnings on undefined symbols
LDFLAGS += \ LDFLAGS += \

View File

@ -56,7 +56,7 @@ _UI_EXTERN void uiWindowsControlQueueRelayout(uiWindowsControl *);
} \ } \
static void _ ## type ## Relayout(uiWindowsControl *c, intmax_t x, intmax_t y, intmax_t width, intmax_t height) \ static void _ ## type ## Relayout(uiWindowsControl *c, intmax_t x, intmax_t y, intmax_t width, intmax_t height) \
{ \ { \
uiWindowsEnsureMoveWindow(type(c)->hwnd, x, y, width, height); \ uiWindowsEnsureMoveWindowDuringResize(type(c)->hwnd, x, y, width, height); \
} \ } \
static void minimumSize(uiWindowsControl *c, uiWindowsSizing *d, intmax_t *width, intmax_t *height); \ static void minimumSize(uiWindowsControl *c, uiWindowsSizing *d, intmax_t *width, intmax_t *height); \
static void _ ## type ## AssignControlIDZOrder(uiWindowsControl *c, LONG_PTR *controlID, HWND *insertAfter) \ static void _ ## type ## AssignControlIDZOrder(uiWindowsControl *c, LONG_PTR *controlID, HWND *insertAfter) \

View File

@ -29,18 +29,21 @@ void uninitAlloc(void)
complain("either you left something around or there's a bug in libui"); complain("either you left something around or there's a bug in libui");
} }
#define rawBytes(pa) (&((*pa)[0]))
void *uiAlloc(size_t size, const char *type) void *uiAlloc(size_t size, const char *type)
{ {
byteArray *out; byteArray *out;
out = new byteArray(size, 0); out = new byteArray(size, 0);
heap[&out[0]] = out; heap[rawBytes(out)] = out;
types[out] = type; types[out] = type;
return &out[0]; return rawBytes(out);
} }
void *uiRealloc(void *p, size_t size, const char *type) void *uiRealloc(void *_p, size_t size, const char *type)
{ {
uint8_t *p = (uint8_t *) _p;
byteArray *arr; byteArray *arr;
if (p == NULL) if (p == NULL)
@ -48,12 +51,14 @@ void *uiRealloc(void *p, size_t size, const char *type)
arr = heap[p]; arr = heap[p];
arr->resize(size, 0); arr->resize(size, 0);
heap.erase(p); heap.erase(p);
heap[&arr[0]] = arr; heap[rawBytes(arr)] = arr;
return &arr[0]; return rawBytes(arr);
} }
void uiFree(void *p) void uiFree(void *_p)
{ {
uint8_t *p = (uint8_t *) _p;
if (p == NULL) if (p == NULL)
complain("attempt to uiFree(NULL); there's a bug somewhere"); complain("attempt to uiFree(NULL); there's a bug somewhere");
types.erase(heap[p]); types.erase(heap[p]);

View File

@ -35,19 +35,22 @@ extern char *toUTF8(const WCHAR *wstr);
extern WCHAR *utf16dup(const WCHAR *orig); extern WCHAR *utf16dup(const WCHAR *orig);
extern WCHAR *strf(const WCHAR *format, ...); extern WCHAR *strf(const WCHAR *format, ...);
extern WCHAR *vstrf(const WCHAR *format, va_list ap); extern WCHAR *vstrf(const WCHAR *format, va_list ap);
extern WCHAR *debugstrf(const WCHAR *format, ..); extern WCHAR *debugstrf(const WCHAR *format, ...);
extern WCHAR *debugvstrf(const WCHAR *format, va_list ap); extern WCHAR *debugvstrf(const WCHAR *format, va_list ap);
extern char *LFtoCRLF(const char *lfonly); extern char *LFtoCRLF(const char *lfonly);
extern void CRLFtoLF(const char *s); extern void CRLFtoLF(const char *s);
// debug.cpp // debug.cpp
#define debugargs const WCHAR *file, uintmax_t line, const WCHAR *file // see http://stackoverflow.com/questions/14421656/is-there-widely-available-wide-character-variant-of-file
extern HRESULT _logLastError(debugargs, const WCHAR *func, const WCHAR *s); // TODO turn line into a const WCHAR* this way
#define logLastError(s) _logLastError(L ## __FILE__, __LINE__, L ## __func__, s) #define _ws(m) L ## m
#define debugargs const WCHAR *file, uintmax_t line, const WCHAR *func
extern HRESULT _logLastError(debugargs, const WCHAR *s);
#define logLastError(s) _logLastError(_ws(__FILE__), __LINE__, _ws(__func__), s)
extern HRESULT _logHRESULT(debugargs, const WCHAR *s, HRESULT hr); extern HRESULT _logHRESULT(debugargs, const WCHAR *s, HRESULT hr);
#define logHRESULT(s, hr) _logHRESULT(L ## __FILE__, __LINE__, L ## __func__, s, hr) #define logHRESULT(s, hr) _logHRESULT(_ws(__FILE__), __LINE__, _ws(__func__), s, hr)
extern void _implbug(debugargs, const WCHAR *format, ...); extern void _implbug(debugargs, const WCHAR *format, ...);
#define implbug(...) _implbug(L ## __FILE__, __LINE__, L ## __func__, __VA_LIST__) #define implbug(...) _implbug(_ws(__FILE__), __LINE__, _ws(__func__), __VA_LIST__)
// winutil.cpp // winutil.cpp
extern int windowClassOf(HWND hwnd, ...); extern int windowClassOf(HWND hwnd, ...);