From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.0 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 7D5751F855 for ; Thu, 28 Jul 2016 00:06:46 +0000 (UTC) From: Eric Wong To: clogger-public@bogomips.org Subject: [PATCH] ext: avoid clobbering existing system functions Date: Thu, 28 Jul 2016 00:06:46 +0000 Message-Id: <20160728000646.24527-1-e@80x24.org> List-Id: These defines may cause incompatibilities if Ruby or other system headers decide to clobber these. It's also confusing to override existing, well-known-and-standardized functions. --- ext/clogger_ext/blocking_helpers.h | 7 +++++-- ext/clogger_ext/clogger.c | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/ext/clogger_ext/blocking_helpers.h b/ext/clogger_ext/blocking_helpers.h index c03c2f5..15634b8 100644 --- a/ext/clogger_ext/blocking_helpers.h +++ b/ext/clogger_ext/blocking_helpers.h @@ -54,6 +54,9 @@ static ssize_t my_write(int fd, const void *buf, size_t count) return r; } -# define stat(path,buf) my_stat((path),(buf)) -# define write(fd,buf,count) my_write((fd),(buf),(count)) +# define nogvl_stat(path,buf) my_stat((path),(buf)) +# define nogvl_write(fd,buf,count) my_write((fd),(buf),(count)) +#else /* !WITHOUT_GVL, for Ruby 1.8 users: */ +# define nogvl_stat(path,buf) stat((path),(buf)) +# define nogvl_write(fd,buf,buf) write((fd),(buf),(count)) #endif /* !WITHOUT_GVL */ diff --git a/ext/clogger_ext/clogger.c b/ext/clogger_ext/clogger.c index 3db9235..f29cf26 100644 --- a/ext/clogger_ext/clogger.c +++ b/ext/clogger_ext/clogger.c @@ -243,7 +243,7 @@ static void write_full(int fd, const char *buf, size_t count) ssize_t r; while (count > 0) { - r = write(fd, buf, count); + r = nogvl_write(fd, buf, count); if ((size_t)r == count) { /* overwhelmingly likely */ return; @@ -993,7 +993,7 @@ static VALUE to_path(VALUE self) if (sscanf(cpath, "/dev/fd/%u", &devfd) == 1) rv = fstat((int)devfd, &sb); else - rv = stat(cpath, &sb); + rv = nogvl_stat(cpath, &sb); /* * calling this method implies the web server will bypass -- EW