Skip to content

Commit d091ba7

Browse files
committed
Improved xhost line argument behavior
1 parent ce055f8 commit d091ba7

File tree

3 files changed

+25
-19
lines changed

3 files changed

+25
-19
lines changed

src/xver.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ const char* XUtils_Version(void)
2222
if (!XSYNC_ATOMIC_GET(&g_nHaveVerLong))
2323
{
2424
xstrncpyf(g_versionLong, sizeof(g_versionLong), "%d.%d build %d (%s)",
25-
XUTILS_VERSION_MAX, XUTILS_VERSION_MIN, XUTILS_BUILD_NUMBER, __DATE__);
25+
XUTILS_VERSION_MAX, XUTILS_VERSION_MIN,
26+
XUTILS_BUILD_NUMBER, XUTILS_BUILD_DATE);
2627

2728
XSYNC_ATOMIC_SET(&g_nHaveVerLong, 1);
2829
}

src/xver.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@
1010
#ifndef __XUTILS_XLIBVER_H__
1111
#define __XUTILS_XLIBVER_H__
1212

13-
#define XUTILS_VERSION_MAX 2
14-
#define XUTILS_VERSION_MIN 6
15-
#define XUTILS_BUILD_NUMBER 49
13+
#define XUTILS_VERSION_MAX 2
14+
#define XUTILS_VERSION_MIN 6
15+
#define XUTILS_BUILD_NUMBER 50
16+
#define XUTILS_BUILD_DATE "2025 May 04"
1617

1718
#ifdef __cplusplus
1819
extern "C" {

tools/xhost.c

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
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

98100
static 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

Comments
 (0)