Software /
code /
prosody
Comparison
util-src/pposix.c @ 7931:b619b85e01aa
util.pposix, configure: Move _GNU_SOURCE macro into source files
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Wed, 01 Mar 2017 22:27:11 +0100 |
parent | 7926:b009c27818c6 |
child | 7965:57f98394b830 |
comparison
equal
deleted
inserted
replaced
7930:5dec27760ecd | 7931:b619b85e01aa |
---|---|
13 * POSIX support functions for Lua | 13 * POSIX support functions for Lua |
14 */ | 14 */ |
15 | 15 |
16 #define MODULE_VERSION "0.3.6" | 16 #define MODULE_VERSION "0.3.6" |
17 | 17 |
18 | |
19 #if defined(__linux__) | |
20 #define _GNU_SOURCE | |
21 #else | |
22 #define _DEFAULT_SOURCE | |
23 #endif | |
24 #define _POSIX_C_SOURCE 200809L | |
25 | |
18 #include <stdlib.h> | 26 #include <stdlib.h> |
19 #include <math.h> | 27 #include <math.h> |
20 #include <unistd.h> | 28 #include <unistd.h> |
21 #include <libgen.h> | 29 #include <libgen.h> |
22 #include <sys/resource.h> | 30 #include <sys/resource.h> |
38 #if (LUA_VERSION_NUM == 501) | 46 #if (LUA_VERSION_NUM == 501) |
39 #define luaL_setfuncs(L, R, N) luaL_register(L, NULL, R) | 47 #define luaL_setfuncs(L, R, N) luaL_register(L, NULL, R) |
40 #endif | 48 #endif |
41 | 49 |
42 #include <fcntl.h> | 50 #include <fcntl.h> |
43 #if defined(__linux__) && defined(_GNU_SOURCE) | 51 #if defined(__linux__) |
44 #include <linux/falloc.h> | 52 #include <linux/falloc.h> |
45 #endif | 53 #endif |
46 | 54 |
47 #if (defined(_SVID_SOURCE) && !defined(WITHOUT_MALLINFO)) | 55 #if !defined(WITHOUT_MALLINFO) |
48 #include <malloc.h> | 56 #include <malloc.h> |
49 #define WITH_MALLINFO | 57 #define WITH_MALLINFO |
50 #endif | 58 #endif |
51 | 59 |
52 #if defined(__FreeBSD__) && defined(RFPROC) | 60 #if defined(__FreeBSD__) && defined(RFPROC) |
661 lua_setfield(L, -2, "release"); | 669 lua_setfield(L, -2, "release"); |
662 lua_pushstring(L, uname_info.version); | 670 lua_pushstring(L, uname_info.version); |
663 lua_setfield(L, -2, "version"); | 671 lua_setfield(L, -2, "version"); |
664 lua_pushstring(L, uname_info.machine); | 672 lua_pushstring(L, uname_info.machine); |
665 lua_setfield(L, -2, "machine"); | 673 lua_setfield(L, -2, "machine"); |
666 #ifdef _GNU_SOURCE | 674 #ifdef __USE_GNU |
667 lua_pushstring(L, uname_info.domainname); | 675 lua_pushstring(L, uname_info.domainname); |
668 lua_setfield(L, -2, "domainname"); | 676 lua_setfield(L, -2, "domainname"); |
669 #endif | 677 #endif |
670 return 1; | 678 return 1; |
671 } | 679 } |
724 | 732 |
725 /* File handle extraction blatantly stolen from | 733 /* File handle extraction blatantly stolen from |
726 * https://github.com/rrthomas/luaposix/blob/master/lposix.c#L631 | 734 * https://github.com/rrthomas/luaposix/blob/master/lposix.c#L631 |
727 * */ | 735 * */ |
728 | 736 |
729 #if _XOPEN_SOURCE >= 600 || _POSIX_C_SOURCE >= 200112L || defined(_GNU_SOURCE) | |
730 int lc_fallocate(lua_State *L) { | 737 int lc_fallocate(lua_State *L) { |
731 int ret; | 738 int ret; |
732 off_t offset, len; | 739 off_t offset, len; |
733 FILE *f = *(FILE **) luaL_checkudata(L, 1, LUA_FILEHANDLE); | 740 FILE *f = *(FILE **) luaL_checkudata(L, 1, LUA_FILEHANDLE); |
734 | 741 |
737 } | 744 } |
738 | 745 |
739 offset = luaL_checkinteger(L, 2); | 746 offset = luaL_checkinteger(L, 2); |
740 len = luaL_checkinteger(L, 3); | 747 len = luaL_checkinteger(L, 3); |
741 | 748 |
742 #if defined(__linux__) && defined(_GNU_SOURCE) | 749 #if defined(__linux__) |
743 errno = 0; | 750 errno = 0; |
744 ret = fallocate(fileno(f), FALLOC_FL_KEEP_SIZE, offset, len); | 751 ret = fallocate(fileno(f), FALLOC_FL_KEEP_SIZE, offset, len); |
745 | 752 |
746 if(ret == 0) { | 753 if(ret == 0) { |
747 lua_pushboolean(L, 1); | 754 lua_pushboolean(L, 1); |
757 lua_pushnil(L); | 764 lua_pushnil(L); |
758 lua_pushstring(L, strerror(errno)); | 765 lua_pushstring(L, strerror(errno)); |
759 return 2; | 766 return 2; |
760 } | 767 } |
761 | 768 |
762 #else | |
763 #warning Only using posix_fallocate() fallback. | |
764 #warning Linux fallocate() is strongly recommended if available: recompile with -D_GNU_SOURCE | |
765 #warning Note that posix_fallocate() will still be used on filesystems that dont support fallocate() | |
766 #endif | 769 #endif |
767 | 770 |
768 ret = posix_fallocate(fileno(f), offset, len); | 771 ret = posix_fallocate(fileno(f), offset, len); |
769 | 772 |
770 if(ret == 0) { | 773 if(ret == 0) { |
782 } | 785 } |
783 | 786 |
784 return 2; | 787 return 2; |
785 } | 788 } |
786 } | 789 } |
787 #endif | |
788 | 790 |
789 /* Register functions */ | 791 /* Register functions */ |
790 | 792 |
791 int luaopen_util_pposix(lua_State *L) { | 793 int luaopen_util_pposix(lua_State *L) { |
792 #if (LUA_VERSION_NUM > 501) | 794 #if (LUA_VERSION_NUM > 501) |
823 | 825 |
824 #ifdef WITH_MALLINFO | 826 #ifdef WITH_MALLINFO |
825 { "meminfo", lc_meminfo }, | 827 { "meminfo", lc_meminfo }, |
826 #endif | 828 #endif |
827 | 829 |
828 #if _XOPEN_SOURCE >= 600 || _POSIX_C_SOURCE >= 200112L || defined(_GNU_SOURCE) | |
829 { "fallocate", lc_fallocate }, | 830 { "fallocate", lc_fallocate }, |
830 #endif | |
831 | 831 |
832 { NULL, NULL } | 832 { NULL, NULL } |
833 }; | 833 }; |
834 | 834 |
835 lua_newtable(L); | 835 lua_newtable(L); |