summaryrefslogtreecommitdiff
path: root/contrib/ntp/ntpd/rc_cmdlength.c
diff options
context:
space:
mode:
authorCy Schubert <cy@FreeBSD.org>2015-07-05 15:42:16 +0000
committerCy Schubert <cy@FreeBSD.org>2015-07-05 15:42:16 +0000
commit276da39af92f48350aa01091a2b8b3e735217eea (patch)
treefb96356e3ef85aaa8d1f5939a9decd315a7ca596 /contrib/ntp/ntpd/rc_cmdlength.c
parent31c98473c1337a238b00342edd7ef85dfb378e24 (diff)
parent873997f35a991eee09ed91148a0cf332360380da (diff)
Notes
Diffstat (limited to 'contrib/ntp/ntpd/rc_cmdlength.c')
-rw-r--r--contrib/ntp/ntpd/rc_cmdlength.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/contrib/ntp/ntpd/rc_cmdlength.c b/contrib/ntp/ntpd/rc_cmdlength.c
new file mode 100644
index 0000000000000..2807d2acd73e7
--- /dev/null
+++ b/contrib/ntp/ntpd/rc_cmdlength.c
@@ -0,0 +1,35 @@
+#include <config.h>
+
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+
+/* Bug 2853 */
+/* evaluate the length of the command sequence. This breaks at the first
+ * char that is not >= SPACE and <= 127 after trimming from the right.
+ */
+size_t
+remoteconfig_cmdlength(
+ const char *src_buf,
+ const char *src_end
+ )
+{
+ const char *scan;
+ unsigned char ch;
+
+ /* trim whitespace & garbage from the right */
+ while (src_end != src_buf) {
+ ch = src_end[-1];
+ if (ch > ' ' && ch < 128)
+ break;
+ --src_end;
+ }
+ /* now do a forward scan */
+ for (scan = src_buf; scan != src_end; ++scan) {
+ ch = scan[0];
+ if ((ch < ' ' || ch >= 128) && ch != '\t')
+ break;
+ }
+ return (size_t)(scan - src_buf);
+}