1717#define XHOST_FILE_PATH "/etc/hosts"
1818#define XHOST_VERSION_MAX 1
1919#define XHOST_VERSION_MIN 0
20- #define XHOST_BUILD_NUMBER 9
20+ #define XHOST_BUILD_NUMBER 10
2121
2222#define XHOST_ADDR_LEN_MAX 15
2323
@@ -26,12 +26,13 @@ typedef struct {
2626 xbool_t bAppend ;
2727 xbool_t bRemove ;
2828 xbool_t bVerbose ;
29- xbool_t bLines ;
3029 xbool_t bSearch ;
3130 xbool_t bComment ;
3231 xbool_t bDisplay ;
3332 xbool_t bUncomment ;
3433 xbool_t bWholeWords ;
34+ xbool_t bInsertLine ;
35+ xbool_t bHideLines ;
3536 size_t nLineNumber ;
3637 size_t nTabSize ;
3738 char sAddress [XLINE_MAX ];
@@ -71,47 +72,49 @@ static void XHost_Usage(const char *pName)
7172 for (i = 0 ; i < nLength ; i ++ ) sWhiteSpace [i ] = ' ' ;
7273 sWhiteSpace [nLength ] = 0 ;
7374
74- printf ("Usage: %s [-a <address >] [-n <hostname>] [-x <number> ]\n" , pName );
75- printf (" %s [-c] [-u] [-r] [-d] [-l ] [-s ] [-v] [-w] [-h]\n\n" , sWhiteSpace );
75+ printf ("Usage: %s [-a <addr >] [-n <hostname>] [-l <line>] [-i ]\n" , pName );
76+ printf (" %s [-c] [-u] [-r] [-d] [-s ] [-x ] [-v] [-w] [-h]\n\n" , sWhiteSpace );
7677
7778 printf ("Options are:\n" );
7879 printf (" -a <address> # IP address\n" );
7980 printf (" -n <hostname> # Host name\n" );
80- printf (" -x <number> # Line number\n" );
81+ printf (" -l <line> # Line number\n" );
8182 printf (" -t <size> # Tab size to lint entries\n" );
83+ printf (" -i # Insert new line\n" );
8284 printf (" -c # Comment entry\n" );
8385 printf (" -u # Uncomment entry\n" );
8486 printf (" -r # Remove entry\n" );
8587 printf (" -s # Search Entry\n" );
86- printf (" -l # Show or add lines\n" );
8788 printf (" -d # Display /etc/hosts file\n" );
8889 printf (" -w # Match whole words in entry\n" );
90+ printf (" -x # Hide lines during display\n" );
8991 printf (" -v # Enable verbose logging\n" );
9092 printf (" -h # Print version and usage\n\n" );
9193
9294 printf ("Examples:\n" );
9395 printf ("1) %s -a 10.10.17.1 -n example.com\n" , pName );
9496 printf ("2) %s -a 192.168.0.17 -rw\n" , pName );
95- printf ("3) %s -n test.com -rdl \n" , pName );
97+ printf ("3) %s -n test.com -rd \n" , pName );
9698}
9799
98100static int XHost_ParseArgs (xhost_args_t * pArgs , int argc , char * argv [])
99101{
100102 memset (pArgs , 0 , sizeof (xhost_args_t ));
101103 int opt = 0 ;
102104
103- while ((opt = getopt (argc , argv , "a:n:t:x: c1:d1:u1:l1: r1:s1:v1:w1:h1" )) != -1 )
105+ while ((opt = getopt (argc , argv , "a:n:l:t: c1:d1:i1: u1:r1:s1:x1 :v1:w1:h1" )) != -1 )
104106 {
105107 switch (opt )
106108 {
107109 case 'a' : xstrncpy (pArgs -> sAddress , sizeof (pArgs -> sAddress ), optarg ); break ;
108110 case 'n' : xstrncpy (pArgs -> sHost , sizeof (pArgs -> sHost ), optarg ); break ;
109- case 'x ' : pArgs -> nLineNumber = atoi (optarg ); break ;
111+ case 'l ' : pArgs -> nLineNumber = atoi (optarg ); break ;
110112 case 't' : pArgs -> nTabSize = atoi (optarg ); break ;
111113 case 'd' : pArgs -> bDisplay = XTRUE ; break ;
114+ case 'i' : pArgs -> bInsertLine = XTRUE ; break ;
112115 case 'c' : pArgs -> bComment = XTRUE ; break ;
113116 case 'u' : pArgs -> bUncomment = XTRUE ; break ;
114- case 'l ' : pArgs -> bLines = XTRUE ; break ;
117+ case 'x ' : pArgs -> bHideLines = XTRUE ; break ;
115118 case 'r' : pArgs -> bRemove = XTRUE ; break ;
116119 case 's' : pArgs -> bSearch = XTRUE ; break ;
117120 case 'v' : pArgs -> bVerbose = XTRUE ; break ;
@@ -124,7 +127,8 @@ static int XHost_ParseArgs(xhost_args_t *pArgs, int argc, char *argv[])
124127 xbool_t bHaveAddress = xstrused (pArgs -> sAddress );
125128 xbool_t bHaveHost = xstrused (pArgs -> sHost );
126129 xbool_t bModify = pArgs -> bRemove || pArgs -> bComment || pArgs -> bUncomment ;
127- pArgs -> bAppend = !bModify && !pArgs -> bSearch && ((bHaveAddress && bHaveHost ) || pArgs -> nLineNumber );
130+ xbool_t bInsertLine = pArgs -> bInsertLine && pArgs -> nLineNumber ;
131+ pArgs -> bAppend = !bModify && !pArgs -> bSearch && ((bHaveAddress && bHaveHost ) || bInsertLine );
128132
129133 if ((bModify || pArgs -> bSearch ) && !bHaveAddress && !bHaveHost && !pArgs -> nLineNumber ) return XSTDERR ;
130134 if (!pArgs -> bAppend && !bModify ) pArgs -> bDisplay = XTRUE ;
@@ -581,7 +585,7 @@ static void XHost_AddLineNumber(xstring_t *pString, int nLine)
581585 XString_Append (pString , " │%s " , XSTR_FMT_RESET );
582586}
583587
584- static int XHost_DisplayHosts (xhost_ctx_t * pCtx , xbool_t bLines )
588+ static int XHost_DisplayHosts (xhost_ctx_t * pCtx , xbool_t bHideLines )
585589{
586590 XHost_ClearContext (pCtx );
587591 XASSERT ((XHost_InitContext (pCtx , XFALSE ) > 0 ), xthrowe ("Failed to init context" ));
@@ -596,7 +600,7 @@ static int XHost_DisplayHosts(xhost_ctx_t *pCtx, xbool_t bLines)
596600
597601 if (pCtx -> bSearch && (pCtx -> nLineNumber != nLineNumber && !XHost_SearchEntry (pCtx ))) continue ;
598602 while (pCtx -> sLine [nPosit ] && isspace ((unsigned char )pCtx -> sLine [nPosit ])) nPosit ++ ;
599- if (bLines ) XHost_AddLineNumber (& pCtx -> hosts , nLineNumber );
603+ if (! bHideLines ) XHost_AddLineNumber (& pCtx -> hosts , nLineNumber );
600604
601605 if (!pCtx -> sLine [nPosit ] || pCtx -> sLine [nPosit ] == '\n' )
602606 {
@@ -674,12 +678,12 @@ int main(int argc, char *argv[])
674678 ctx .nTabSize = args .nTabSize ;
675679 ctx .bSearch = args .bSearch ;
676680
677- if (args .bAppend ) nStatus = XHost_AddEntry (& ctx , args .bLines );
681+ if (args .bAppend ) nStatus = XHost_AddEntry (& ctx , args .bInsertLine );
678682 else if (args .bUncomment ) nStatus = XHost_UncommentEntry (& ctx );
679683 else if (args .bComment ) nStatus = XHost_RemoveEntry (& ctx , XTRUE );
680684 else if (args .bRemove ) nStatus = XHost_RemoveEntry (& ctx , XFALSE );
681685 if (!nStatus && args .nTabSize ) nStatus = XHost_LintEntries (& ctx );
682- if (!nStatus && args .bDisplay ) XHost_DisplayHosts (& ctx , args .bLines );
686+ if (!nStatus && args .bDisplay ) XHost_DisplayHosts (& ctx , args .bHideLines );
683687
684688 XHost_ClearContext (& ctx );
685689 return nStatus ;
0 commit comments