Line Editing Libraries

In ntp-4.2.4 and before, ntp searched for and used -ledit or -lreadline to provide line editing capabilities. This mechanism was incomplete, as described in bug_small.png Bug #764.

We now use the following argument to configure to show the order we search for line editing libraries (and readline must be manually provided because it is GPL code and not compatible with things like OpenSSL):


In ntp-4.2.5 (at least) and before, the line editing facilities were put directly into the source code of ntpdc.c and ntpq.c - pretty much duplicated code.

I'm wondering if it would be useful to create a new library, say ntpline, which would contain a library that ntpdc and ntp would call to handle all line input.

libntpline/ would produce this convenience library, using one of the following files:

 stdio.c        for normal stdio
 readline.c     for -lreadline-compatible code
 edit.c         for -ledit-compatible

Additional 'methods' could be added easily.

This would reduce the #ifdef clutter in ntp{q,dc}.c and also give us a single point of service for these functions.

I'm thinking we'd need:


as the API (off the top of my head, as a first pass).

-- HarlanStenn - 20 Oct 2007

I'd like to suggest a slightly simpler interface which I believe achieves the same aims.

Rather than a library built from three different sources we simply use a common header file ntpline.h to provide the shim between the application and the different librarys. The header file would use the existing #ifdef configs to select the appropriate library header files and implement the interface functions as either #define macros or inline functions.

This requires no changes to the build system rather than adding optional includes of different sources.

A slight expansion on your api, I also think ntpline_gets() has an implied operation than might confuse some so have changed the name.

 #define MAXLINE 512                     /* The minimum input line length we are guaranteed to process */
  void ntpline_init(void);                   /* Initialise the interface (must be called first) */
  char *ntpline_readline(char *prompt);  /* See below */
  void *nptline_close(void);              /* Release memory and shutdown */

ntpline_readline() issues the prompt which may be zero length or NULL and then gathers a line of input. The returned line may use malloced memory or a static buffer, will be terminated with a nul character and may be longer than MAXLINE characters.

-- BobDunlop - 22 Oct 2007

This topic: Dev > WebHome > DevelopmentIssues > LineEditingLibraries
Topic revision: r5 - 2007-10-22 - 18:20:59 - BobDunlop
SSL security by CAcert
Get the CAcert Root Certificate
This site is powered by the TWiki collaboration platform
IPv6 Ready
Copyright & 1999-2020 by the contributing authors. All material on this collaboration platform is the property of the contributing authors. Ideas, requests, problems regarding the site? Send feedback