nutcracker 0.2.4.12 → 0.3.0.12
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/Rakefile +1 -1
- data/ext/nutcracker/ChangeLog +10 -0
- data/ext/nutcracker/Makefile.am +2 -0
- data/ext/nutcracker/Makefile.in +101 -14
- data/ext/nutcracker/README.md +18 -1
- data/ext/nutcracker/config.h.in +18 -0
- data/ext/nutcracker/configure +196 -25
- data/ext/nutcracker/configure.ac +64 -6
- data/ext/nutcracker/extconf.rb +1 -1
- data/ext/nutcracker/man/nutcracker.8 +76 -0
- data/ext/nutcracker/notes/debug.txt +116 -16
- data/ext/nutcracker/notes/kqueue.pdf +0 -0
- data/ext/nutcracker/notes/recommendation.md +20 -0
- data/ext/nutcracker/notes/redis.md +2 -2
- data/ext/nutcracker/scripts/nutcracker.spec +1 -1
- data/ext/nutcracker/scripts/redis-check.sh +3 -1
- data/ext/nutcracker/src/Makefile.am +15 -6
- data/ext/nutcracker/src/Makefile.in +39 -36
- data/ext/nutcracker/src/event/Makefile.am +16 -0
- data/ext/nutcracker/src/event/Makefile.in +492 -0
- data/ext/nutcracker/src/event/nc_epoll.c +344 -0
- data/ext/nutcracker/src/event/nc_event.h +88 -0
- data/ext/nutcracker/src/event/nc_evport.c +420 -0
- data/ext/nutcracker/src/event/nc_kqueue.c +412 -0
- data/ext/nutcracker/src/hashkit/nc_crc32.c +19 -1
- data/ext/nutcracker/src/hashkit/nc_hashkit.h +3 -1
- data/ext/nutcracker/src/hashkit/nc_md5.c +257 -315
- data/ext/nutcracker/src/nc.c +12 -1
- data/ext/nutcracker/src/nc_connection.c +18 -1
- data/ext/nutcracker/src/nc_connection.h +1 -0
- data/ext/nutcracker/src/nc_core.c +22 -30
- data/ext/nutcracker/src/nc_core.h +22 -7
- data/ext/nutcracker/src/nc_proxy.c +8 -9
- data/ext/nutcracker/src/nc_queue.h +2 -0
- data/ext/nutcracker/src/nc_request.c +3 -4
- data/ext/nutcracker/src/nc_response.c +25 -8
- data/ext/nutcracker/src/nc_server.c +8 -6
- data/ext/nutcracker/src/nc_stats.c +46 -43
- data/ext/nutcracker/src/nc_stats.h +37 -30
- data/ext/nutcracker/src/nc_util.c +6 -1
- data/ext/nutcracker/src/proto/nc_redis.c +19 -5
- data/lib/nutcracker/version.rb +1 -1
- data/lib/nutcracker.rb +1 -1
- metadata +10 -4
- data/ext/nutcracker/src/nc_event.c +0 -214
- data/ext/nutcracker/src/nc_event.h +0 -39
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZTlkN2UzMGQyY2ZlYzFhNGViMWIwMDgwNjJjNDUwMzc3NjI2NTI4Mw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ODAyMDQ4MDdmYWI1NWRhYjc5YTIxOGYyZjA0NzRmMzBhMzZmODc1NA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NTEzZjc4NjUwMDFmM2ZkZmMyNjU5NDVjZjE5MGY3ZjEyOTc5NDM4ZGU3MGVm
|
10
|
+
OWU5OWY1ZTFhNjk5Zjg3YTdkYWNhNzEwMzQwNzk2MjlmODFiNzI1MjkwYTBi
|
11
|
+
MGY3MzVkNjk1NjNlODEzMTRmN2I3MWU3YjMzZjRmMGEwMTEzOTg=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
OGZiZmU3NmM5NzBlYzE4YTkzMGViYzZiNjU3ZjMwNjNmMThmYmJhZTAyYTBi
|
14
|
+
MjQ4NWYzMTA2ZDFjNmRiMjQyOTZjYTljYjZkYjQ3NWVjOWUwNjExY2FlMzBm
|
15
|
+
MmY3ZDg1YzNhZjY0NGY0MmRhMjFjZjViNzYxYzE5NjU2MDhmZGE=
|
data/Rakefile
CHANGED
@@ -17,7 +17,7 @@ task :download do
|
|
17
17
|
sh "mv nutcracker-#{sversion} ext/nutcracker"
|
18
18
|
File.open("ext/nutcracker/extconf.rb",'w') do |file|
|
19
19
|
file.puts %q{
|
20
|
-
raise "no support for #{RUBY_PLATFORM}" if RUBY_PLATFORM =~ /darwin|mswin|mingw/
|
20
|
+
#raise "no support for #{RUBY_PLATFORM}" if RUBY_PLATFORM =~ /darwin|mswin|mingw/
|
21
21
|
system "./configure --prefix=#{File.expand_path('..',__FILE__)}"
|
22
22
|
system 'make'
|
23
23
|
}
|
data/ext/nutcracker/ChangeLog
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
2013-20-12 Manju Rajashekhar <manj@cs.stanford.edu>
|
2
|
+
* twemproxy: version 0.3.0 release
|
3
|
+
SRANDMEMBER support for the optional count argument (mkhq)
|
4
|
+
Handle case where server responds while the request is still being sent (jdi-tagged)
|
5
|
+
event ports (solaris/smartos) support
|
6
|
+
add timestamp when the server was ejected
|
7
|
+
support for set ex/px/nx/xx for redis 2.6.12 and up (ypocat)
|
8
|
+
kqueue (bsd) support (ferenyx)
|
9
|
+
fix parsing redis response to accept integer reply (charsyam)
|
10
|
+
|
1
11
|
2013-23-04 Manju Rajashekhar <manj@cs.stanford.edu>
|
2
12
|
* twemproxy: version 0.2.4 release
|
3
13
|
redis keys must be less than mbuf_data_size() in length (fifsky)
|
data/ext/nutcracker/Makefile.am
CHANGED
data/ext/nutcracker/Makefile.in
CHANGED
@@ -34,11 +34,11 @@ POST_UNINSTALL = :
|
|
34
34
|
build_triplet = @build@
|
35
35
|
host_triplet = @host@
|
36
36
|
subdir = .
|
37
|
-
DIST_COMMON = $(am__configure_deps) $(
|
38
|
-
$(srcdir)/Makefile.
|
39
|
-
$(top_srcdir)/configure ChangeLog
|
40
|
-
config/config.
|
41
|
-
config/ltmain.sh config/missing
|
37
|
+
DIST_COMMON = $(am__configure_deps) $(dist_man_MANS) \
|
38
|
+
$(srcdir)/Makefile.am $(srcdir)/Makefile.in \
|
39
|
+
$(srcdir)/config.h.in $(top_srcdir)/configure ChangeLog \
|
40
|
+
config/config.guess config/config.sub config/depcomp \
|
41
|
+
config/install-sh config/ltmain.sh config/missing
|
42
42
|
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
43
43
|
am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
|
44
44
|
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
|
@@ -61,6 +61,37 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
|
|
61
61
|
install-pdf-recursive install-ps-recursive install-recursive \
|
62
62
|
installcheck-recursive installdirs-recursive pdf-recursive \
|
63
63
|
ps-recursive uninstall-recursive
|
64
|
+
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
65
|
+
am__vpath_adj = case $$p in \
|
66
|
+
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
67
|
+
*) f=$$p;; \
|
68
|
+
esac;
|
69
|
+
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
|
70
|
+
am__install_max = 40
|
71
|
+
am__nobase_strip_setup = \
|
72
|
+
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
|
73
|
+
am__nobase_strip = \
|
74
|
+
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
|
75
|
+
am__nobase_list = $(am__nobase_strip_setup); \
|
76
|
+
for p in $$list; do echo "$$p $$p"; done | \
|
77
|
+
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
|
78
|
+
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
|
79
|
+
if (++n[$$2] == $(am__install_max)) \
|
80
|
+
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
|
81
|
+
END { for (dir in files) print dir, files[dir] }'
|
82
|
+
am__base_list = \
|
83
|
+
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
|
84
|
+
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
|
85
|
+
am__uninstall_files_from_dir = { \
|
86
|
+
test -z "$$files" \
|
87
|
+
|| { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|
88
|
+
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
|
89
|
+
$(am__cd) "$$dir" && rm -f $$files; }; \
|
90
|
+
}
|
91
|
+
man8dir = $(mandir)/man8
|
92
|
+
am__installdirs = "$(DESTDIR)$(man8dir)"
|
93
|
+
NROFF = nroff
|
94
|
+
MANS = $(dist_man_MANS)
|
64
95
|
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
|
65
96
|
distclean-recursive maintainer-clean-recursive
|
66
97
|
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
|
@@ -231,6 +262,7 @@ top_srcdir = @top_srcdir@
|
|
231
262
|
MAINTAINERCLEANFILES = Makefile.in aclocal.m4 configure config.h.in config.h.in~ stamp-h.in
|
232
263
|
ACLOCAL_AMFLAGS = -I m4
|
233
264
|
SUBDIRS = contrib src
|
265
|
+
dist_man_MANS = man/nutcracker.8
|
234
266
|
EXTRA_DIST = README.md NOTICE LICENSE ChangeLog conf scripts notes
|
235
267
|
all: config.h
|
236
268
|
$(MAKE) $(AM_MAKEFLAGS) all-recursive
|
@@ -294,6 +326,42 @@ clean-libtool:
|
|
294
326
|
|
295
327
|
distclean-libtool:
|
296
328
|
-rm -f libtool config.lt
|
329
|
+
install-man8: $(dist_man_MANS)
|
330
|
+
@$(NORMAL_INSTALL)
|
331
|
+
test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)"
|
332
|
+
@list=''; test -n "$(man8dir)" || exit 0; \
|
333
|
+
{ for i in $$list; do echo "$$i"; done; \
|
334
|
+
l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \
|
335
|
+
sed -n '/\.8[a-z]*$$/p'; \
|
336
|
+
} | while read p; do \
|
337
|
+
if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
|
338
|
+
echo "$$d$$p"; echo "$$p"; \
|
339
|
+
done | \
|
340
|
+
sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
|
341
|
+
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
|
342
|
+
sed 'N;N;s,\n, ,g' | { \
|
343
|
+
list=; while read file base inst; do \
|
344
|
+
if test "$$base" = "$$inst"; then list="$$list $$file"; else \
|
345
|
+
echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
|
346
|
+
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \
|
347
|
+
fi; \
|
348
|
+
done; \
|
349
|
+
for i in $$list; do echo "$$i"; done | $(am__base_list) | \
|
350
|
+
while read files; do \
|
351
|
+
test -z "$$files" || { \
|
352
|
+
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \
|
353
|
+
$(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \
|
354
|
+
done; }
|
355
|
+
|
356
|
+
uninstall-man8:
|
357
|
+
@$(NORMAL_UNINSTALL)
|
358
|
+
@list=''; test -n "$(man8dir)" || exit 0; \
|
359
|
+
files=`{ for i in $$list; do echo "$$i"; done; \
|
360
|
+
l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \
|
361
|
+
sed -n '/\.8[a-z]*$$/p'; \
|
362
|
+
} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
|
363
|
+
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
|
364
|
+
dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir)
|
297
365
|
|
298
366
|
# This directory's subdirectories are mostly independent; you can cd
|
299
367
|
# into them and run `make' without going through this Makefile.
|
@@ -431,6 +499,19 @@ distclean-tags:
|
|
431
499
|
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
432
500
|
|
433
501
|
distdir: $(DISTFILES)
|
502
|
+
@list='$(MANS)'; if test -n "$$list"; then \
|
503
|
+
list=`for p in $$list; do \
|
504
|
+
if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
|
505
|
+
if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \
|
506
|
+
if test -n "$$list" && \
|
507
|
+
grep 'ab help2man is required to generate this page' $$list >/dev/null; then \
|
508
|
+
echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \
|
509
|
+
grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \
|
510
|
+
echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \
|
511
|
+
echo " typically \`make maintainer-clean' will remove them" >&2; \
|
512
|
+
exit 1; \
|
513
|
+
else :; fi; \
|
514
|
+
else :; fi
|
434
515
|
$(am__remove_distdir)
|
435
516
|
test -d "$(distdir)" || mkdir "$(distdir)"
|
436
517
|
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
@@ -622,9 +703,12 @@ distcleancheck: distclean
|
|
622
703
|
exit 1; } >&2
|
623
704
|
check-am: all-am
|
624
705
|
check: check-recursive
|
625
|
-
all-am: Makefile config.h
|
706
|
+
all-am: Makefile $(MANS) config.h
|
626
707
|
installdirs: installdirs-recursive
|
627
708
|
installdirs-am:
|
709
|
+
for dir in "$(DESTDIR)$(man8dir)"; do \
|
710
|
+
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
|
711
|
+
done
|
628
712
|
install: install-recursive
|
629
713
|
install-exec: install-exec-recursive
|
630
714
|
install-data: install-data-recursive
|
@@ -678,7 +762,7 @@ info: info-recursive
|
|
678
762
|
|
679
763
|
info-am:
|
680
764
|
|
681
|
-
install-data-am:
|
765
|
+
install-data-am: install-man
|
682
766
|
|
683
767
|
install-dvi: install-dvi-recursive
|
684
768
|
|
@@ -694,7 +778,7 @@ install-info: install-info-recursive
|
|
694
778
|
|
695
779
|
install-info-am:
|
696
780
|
|
697
|
-
install-man:
|
781
|
+
install-man: install-man8
|
698
782
|
|
699
783
|
install-pdf: install-pdf-recursive
|
700
784
|
|
@@ -724,7 +808,9 @@ ps: ps-recursive
|
|
724
808
|
|
725
809
|
ps-am:
|
726
810
|
|
727
|
-
uninstall-am:
|
811
|
+
uninstall-am: uninstall-man
|
812
|
+
|
813
|
+
uninstall-man: uninstall-man8
|
728
814
|
|
729
815
|
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
|
730
816
|
ctags-recursive install-am install-strip tags-recursive
|
@@ -739,11 +825,12 @@ uninstall-am:
|
|
739
825
|
install install-am install-data install-data-am install-dvi \
|
740
826
|
install-dvi-am install-exec install-exec-am install-html \
|
741
827
|
install-html-am install-info install-info-am install-man \
|
742
|
-
install-pdf install-pdf-am install-ps
|
743
|
-
install-strip installcheck installcheck-am
|
744
|
-
installdirs-am maintainer-clean
|
745
|
-
|
746
|
-
ps ps-am tags tags-recursive
|
828
|
+
install-man8 install-pdf install-pdf-am install-ps \
|
829
|
+
install-ps-am install-strip installcheck installcheck-am \
|
830
|
+
installdirs installdirs-am maintainer-clean \
|
831
|
+
maintainer-clean-generic mostlyclean mostlyclean-generic \
|
832
|
+
mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
|
833
|
+
uninstall uninstall-am uninstall-man uninstall-man8
|
747
834
|
|
748
835
|
|
749
836
|
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
data/ext/nutcracker/README.md
CHANGED
@@ -40,6 +40,7 @@ To build nutcracker from source with _debug logs enabled_ and _assertions disabl
|
|
40
40
|
+ Supports multiple hashing modes including consistent hashing and distribution.
|
41
41
|
+ Can be configured to disable nodes on failures.
|
42
42
|
+ Observability through stats exposed on stats monitoring port.
|
43
|
+
+ Works with Linux, *BSD, OS X and Solaris (SmartOS)
|
43
44
|
|
44
45
|
## Help
|
45
46
|
|
@@ -77,7 +78,8 @@ nutcracker can be configured through a YAML file specified by the -c or --conf-f
|
|
77
78
|
+ one_at_a_time
|
78
79
|
+ md5
|
79
80
|
+ crc16
|
80
|
-
+ crc32
|
81
|
+
+ crc32 (crc32 implementation compatible with [libmemcached](http://libmemcached.org/))
|
82
|
+
+ crc32a (correct crc32 implementation as per the spec)
|
81
83
|
+ fnv1_64
|
82
84
|
+ fnv1a_64
|
83
85
|
+ fnv1_32
|
@@ -218,12 +220,27 @@ Pipelining is the reason why nutcracker ends up doing better in terms of through
|
|
218
220
|
|
219
221
|
If you are deploying nutcracker in production, you might consider reading through the [recommendation document](notes/recommendation.md) to understand the parameters you could tune in nutcracker to run it efficiently in the production environment.
|
220
222
|
|
223
|
+
## Utils
|
224
|
+
+ [nagios checks](https://github.com/wanelo/nagios-checks/blob/master/check_twemproxy)
|
225
|
+
+ [circunous](https://github.com/wanelo-chef/nad-checks/blob/master/recipes/twemproxy.rb)
|
226
|
+
+ [puppet module](https://github.com/wuakitv/puppet-twemproxy)
|
227
|
+
+ [nutcracker-web](https://github.com/kontera-technologies/nutcracker-web)
|
228
|
+
+ [munin-plugin](https://github.com/eveiga/contrib/tree/nutcracker/plugins/nutcracker)
|
229
|
+
+ [redis-twemproxy agent](https://github.com/Stono/redis-twemproxy-agent)
|
230
|
+
|
221
231
|
## Users
|
222
232
|
+ [Pinterest](http://pinterest.com/)
|
223
233
|
+ [Tumblr](https://www.tumblr.com/)
|
224
234
|
+ [Twitter](https://twitter.com/)
|
225
235
|
+ [Vine](http://vine.co/)
|
226
236
|
+ [Kiip](http://www.kiip.me/)
|
237
|
+
+ [Wuaki.tv](https://wuaki.tv/)
|
238
|
+
+ [Wanelo](http://wanelo.com/)
|
239
|
+
+ [Kontera](http://kontera.com/)
|
240
|
+
+ [Wikimedia](http://www.wikimedia.org/)
|
241
|
+
+ [Bright](http://www.bright.com/)
|
242
|
+
+ [56.com](http://www.56.com/)
|
243
|
+
+ [Snapchat](http://www.snapchat.com/)
|
227
244
|
|
228
245
|
## Issues and Support
|
229
246
|
|
data/ext/nutcracker/config.h.in
CHANGED
@@ -9,6 +9,9 @@
|
|
9
9
|
/* Define to 1 if panic on an assert is enabled */
|
10
10
|
#undef HAVE_ASSERT_PANIC
|
11
11
|
|
12
|
+
/* Define to 1 if backtrace is supported */
|
13
|
+
#undef HAVE_BACKTRACE
|
14
|
+
|
12
15
|
/* Define to 1 if debug log is enabled */
|
13
16
|
#undef HAVE_DEBUG_LOG
|
14
17
|
|
@@ -18,6 +21,15 @@
|
|
18
21
|
/* Define to 1 if you have the `dup2' function. */
|
19
22
|
#undef HAVE_DUP2
|
20
23
|
|
24
|
+
/* Define to 1 if epoll is supported */
|
25
|
+
#undef HAVE_EPOLL
|
26
|
+
|
27
|
+
/* Define to 1 if event ports is supported */
|
28
|
+
#undef HAVE_EVENT_PORTS
|
29
|
+
|
30
|
+
/* Define to 1 if you have the <execinfo.h> header file. */
|
31
|
+
#undef HAVE_EXECINFO_H
|
32
|
+
|
21
33
|
/* Define to 1 if you have the <fcntl.h> header file. */
|
22
34
|
#undef HAVE_FCNTL_H
|
23
35
|
|
@@ -42,6 +54,9 @@
|
|
42
54
|
/* Define to 1 if you have the <inttypes.h> header file. */
|
43
55
|
#undef HAVE_INTTYPES_H
|
44
56
|
|
57
|
+
/* Define to 1 if kqueue is supported */
|
58
|
+
#undef HAVE_KQUEUE
|
59
|
+
|
45
60
|
/* Define to 1 if you have the `m' library (-lm). */
|
46
61
|
#undef HAVE_LIBM
|
47
62
|
|
@@ -122,6 +137,9 @@
|
|
122
137
|
/* Define to 1 if you have the <sys/epoll.h> header file. */
|
123
138
|
#undef HAVE_SYS_EPOLL_H
|
124
139
|
|
140
|
+
/* Define to 1 if you have the <sys/event.h> header file. */
|
141
|
+
#undef HAVE_SYS_EVENT_H
|
142
|
+
|
125
143
|
/* Define to 1 if you have the <sys/ioctl.h> header file. */
|
126
144
|
#undef HAVE_SYS_IOCTL_H
|
127
145
|
|