Skip to content
This repository was archived by the owner on Jun 18, 2021. It is now read-only.

Commit cbf4a10

Browse files
committed
Deduplicate UV_FS_EVENT and UV_FS_POLL handling
1 parent 8f93cde commit cbf4a10

File tree

1 file changed

+23
-38
lines changed

1 file changed

+23
-38
lines changed

src/node_report.cc

Lines changed: 23 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -494,50 +494,35 @@ static void walkHandle(uv_handle_t* h, void* arg) {
494494
std::ostream* out = reinterpret_cast<std::ostream*>(arg);
495495
uv_any_handle* handle = (uv_any_handle*)h;
496496

497+
#define UV_FS_CASE(t, uv_function) \
498+
do { \
499+
char *buffer = nullptr; \
500+
int rc; \
501+
size_t size = 0; \
502+
type = #t; \
503+
/* First call to get required buffer size. */ \
504+
rc = uv_function(&(handle->##t), buffer, &size); \
505+
if (rc == UV_ENOBUFS) { \
506+
buffer = (char *)malloc(size); \
507+
rc = uv_function(&(handle->##t), buffer, &size); \
508+
if (rc == 0) { \
509+
/* buffer is not null terminated. */ \
510+
std::string name(buffer, size); \
511+
data << "filename: " << name; \
512+
} \
513+
free(buffer); \
514+
} \
515+
} \
516+
while (0)
517+
497518
// List all the types so we get a compile warning if we've missed one,
498519
// (using default: supresses the compiler warning.)
499520
switch (h->type) {
500521
case UV_UNKNOWN_HANDLE: type = "unknown"; break;
501522
case UV_ASYNC: type = "async"; break;
502523
case UV_CHECK: type = "check"; break;
503-
case UV_FS_EVENT: {
504-
char *buffer = nullptr;
505-
int rc;
506-
size_t size = 0;
507-
type = "fs_event";
508-
// First call to get required buffer size.
509-
rc = uv_fs_event_getpath(&(handle->fs_event), buffer, &size);
510-
if (rc == UV_ENOBUFS) {
511-
buffer = (char *)malloc(size);
512-
rc = uv_fs_event_getpath(&(handle->fs_event), buffer, &size);
513-
if (rc == 0) {
514-
// buffer is not null terminated.
515-
std::string name(buffer, size);
516-
data << "filename: " << name;
517-
}
518-
free(buffer);
519-
}
520-
break;
521-
}
522-
case UV_FS_POLL: {
523-
char *buffer = nullptr;
524-
int rc;
525-
size_t size = 0;
526-
type = "fs_poll";
527-
// First call to get required buffer size.
528-
rc = uv_fs_poll_getpath(&(handle->fs_poll), buffer, &size);
529-
if (rc == UV_ENOBUFS) {
530-
buffer = (char *)malloc(size);
531-
rc = uv_fs_poll_getpath(&(handle->fs_poll), buffer, &size);
532-
if (rc == 0) {
533-
// buffer is not null terminated.
534-
std::string name(buffer, size);
535-
data << "filename: " << name;
536-
}
537-
free(buffer);
538-
}
539-
break;
540-
}
524+
case UV_FS_EVENT: UV_FS_CASE(fs_event, uv_fs_event_getpath); break;
525+
case UV_FS_POLL: UV_FS_CASE(fs_poll, uv_fs_poll_getpath); break;
541526
case UV_HANDLE: type = "handle"; break;
542527
case UV_IDLE: type = "idle"; break;
543528
case UV_NAMED_PIPE: type = "pipe"; break;

0 commit comments

Comments
 (0)