Update command line parsing to current coding conventions.

This commit is contained in:
Jonas 'Sortie' Termansen 2015-07-30 01:08:49 +02:00
parent 4e918687ce
commit 67af95c7ee
33 changed files with 605 additions and 558 deletions

View File

@ -27,10 +27,6 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#if !defined(VERSIONSTR)
#define VERSIONSTR "unknown version"
#endif
static void compact_arguments(int* argc, char*** argv) static void compact_arguments(int* argc, char*** argv)
{ {
for ( int i = 0; i < *argc; i++ ) for ( int i = 0; i < *argc; i++ )

View File

@ -238,25 +238,31 @@ bool PrintFile(int fd, initrd_superblock_t* sb, initrd_inode_t* inode)
return true; return true;
} }
void Usage(FILE* fp, const char* argv0) static void compact_arguments(int* argc, char*** argv)
{ {
fprintf(fp, "usage: %s [--check] <INITRD> (ls | cat) <PATH>\n", argv0); for ( int i = 0; i < *argc; i++ )
{
while ( i < *argc && !(*argv)[i] )
{
for ( int n = i; n < *argc; n++ )
(*argv)[n] = (*argv)[n+1];
(*argc)--;
}
}
}
static void help(FILE* fp, const char* argv0)
{
fprintf(fp, "Usage: %s [OPTION]... INITRD (ls | cat) PATH\n", argv0);
fprintf(fp, "Accesses data in a Sortix kernel init ramdisk.\n"); fprintf(fp, "Accesses data in a Sortix kernel init ramdisk.\n");
} }
void Help(FILE* fp, const char* argv0) static void version(FILE* fp, const char* argv0)
{ {
Usage(fp, argv0); fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR);
} fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n");
fprintf(fp, "This is free software: you are free to change and redistribute it.\n");
void Version(FILE* fp, const char* argv0) fprintf(fp, "There is NO WARRANTY, to the extent permitted by law.\n");
{
(void) argv0;
fprintf(fp, "initrdfs 0.2\n");
fprintf(fp, "Copyright (C) 2012 Jonas 'Sortie' Termansen\n");
fprintf(fp, "This is free software; see the source for copying conditions. There is NO\n");
fprintf(fp, "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n");
fprintf(fp, "website: http://www.maxsi.org/software/sortix/\n");
} }
int main(int argc, char* argv[]) int main(int argc, char* argv[])
@ -264,50 +270,51 @@ int main(int argc, char* argv[])
bool all = false; bool all = false;
bool check = false; bool check = false;
const char* argv0 = argv[0]; const char* argv0 = argv[0];
if ( argc < 2 ) { Usage(stdout, argv0); exit(0); }
for ( int i = 1; i < argc; i++ ) for ( int i = 1; i < argc; i++ )
{ {
const char* arg = argv[i]; const char* arg = argv[i];
if ( arg[0] != '-' ) { continue; } if ( arg[0] != '-' || !arg[1] )
continue;
argv[i] = NULL; argv[i] = NULL;
if ( !strcmp(arg, "--") ) { break; } if ( !strcmp(arg, "--") )
if ( !strcmp(arg, "--help") ) { Help(stdout, argv0); exit(0); } break;
if ( !strcmp(arg, "--usage") ) { Usage(stdout, argv0); exit(0); } if ( arg[1] != '-' )
if ( !strcmp(arg, "--version") ) { Version(stdout, argv0); exit(0); }
if ( !strcmp(arg, "-a") ) { all = true; continue; }
if ( !strcmp(arg, "--check") ) { check = true; continue; }
fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
Usage(stderr, argv0);
exit(1);
}
const char* initrd = NULL;
const char* cmd = NULL;
const char* path = NULL;
int args = 0;
for ( int i = 1; i < argc; i++ )
{
if ( !argv[i] ) { continue; }
switch ( ++args )
{ {
case 1: initrd = argv[i]; break; while ( char c = *++arg ) switch ( c )
case 2: cmd = argv[i]; break; {
case 3: path = argv[i]; break; default:
fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, c);
help(stderr, argv0);
exit(1);
}
}
else if ( !strcmp(arg, "--help") )
help(stdout, argv0), exit(0);
else if ( !strcmp(arg, "--version") )
version(stdout, argv0), exit(0);
else if ( !strcmp(arg, "-a") )
all = true;
else if ( !strcmp(arg, "--check") )
check = true;
else
{
fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
help(stderr, argv0);
exit(1);
} }
} }
const char* errmsg = NULL; compact_arguments(&argc, &argv);
if ( !errmsg && !initrd ) { errmsg = "no initrd specified"; }
if ( !errmsg && !cmd ) { errmsg = "no command specified"; }
if ( !errmsg && !path ) { errmsg = "no path specified"; }
if ( !errmsg && 3 < args ) { errmsg = "too many arguments"; }
if ( errmsg ) if ( argc == 1 )
{ error(1, 0, "No initrd specified");
fprintf(stderr, "%s: %s\n", argv0, errmsg), const char* initrd = argv[1];
Usage(stderr, argv0); if ( argc == 2 )
exit(1); error(1, 0, "No command specified");
} const char* cmd = argv[2];
if ( argc == 3 )
error(1, 0, "No path specified");
const char* path = argv[3];
int fd = open(initrd, O_RDONLY); int fd = open(initrd, O_RDONLY);
if ( fd < 0 ) { error(1, errno, "open: %s", initrd); } if ( fd < 0 ) { error(1, errno, "open: %s", initrd); }

View File

@ -4,10 +4,9 @@ include ../build-aux/version.mak
include ../build-aux/dirs.mak include ../build-aux/dirs.mak
OPTLEVEL?=$(DEFAULT_OPTLEVEL) OPTLEVEL?=$(DEFAULT_OPTLEVEL)
CPPFLAGS?=
CXXFLAGS?=$(OPTLEVEL) CXXFLAGS?=$(OPTLEVEL)
CPPFLAGS:=$(CPPFLAGS) CPPFLAGS:=$(CPPFLAGS) -DVERSIONSTR=\"$(VERSION)\"
CXXFLAGS:=$(CXXFLAGS) -Wall -Wextra -fno-exceptions -fno-rtti CXXFLAGS:=$(CXXFLAGS) -Wall -Wextra -fno-exceptions -fno-rtti
BINARIES:=\ BINARIES:=\

View File

@ -55,17 +55,19 @@ int redirect(const char* path, int flags, mode_t mode = 0)
return 0; return 0;
} }
void help(FILE* fp, const char* argv0) static void help(FILE* fp, const char* argv0)
{ {
fprintf(fp, "Usage: %s [OPTION]... --tarball=TARBALL --normalized=NORMALIZED SOURCE-TIX\n", argv0); fprintf(fp, "Usage: %s [OPTION]... --tarball=TARBALL --normalized=NORMALIZED SOURCE-TIX\n", argv0);
fprintf(fp, "Creates a port tix by generating patches using source code and tarballs.\n"); fprintf(fp, "Creates a port tix by generating patches using source code and tarballs.\n");
} }
void version(FILE* fp, const char* argv0) static void version(FILE* fp, const char* argv0)
{ {
help(fp, argv0); fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR);
fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n");
fprintf(fp, "This is free software: you are free to change and redistribute it.\n");
fprintf(fp, "There is NO WARRANTY, to the extent permitted by law.\n");
} }
int main(int argc, char* argv[]) int main(int argc, char* argv[])
{ {
char* cp = strdup(getenv_def("CP", "cp")); char* cp = strdup(getenv_def("CP", "cp"));
@ -82,7 +84,7 @@ int main(int argc, char* argv[])
for ( int i = 0; i < argc; i++ ) for ( int i = 0; i < argc; i++ )
{ {
const char* arg = argv[i]; const char* arg = argv[i];
if ( arg[0] != '-' ) if ( arg[0] != '-' || !arg[1] )
continue; continue;
argv[i] = NULL; argv[i] = NULL;
if ( !strcmp(arg, "--") ) if ( !strcmp(arg, "--") )
@ -92,13 +94,15 @@ int main(int argc, char* argv[])
while ( char c = *++arg ) switch ( c ) while ( char c = *++arg ) switch ( c )
{ {
default: default:
fprintf(stderr, "%s: unknown option -- `%c'\n", argv0, c); fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, c);
help(stderr, argv0); help(stderr, argv0);
exit(1); exit(1);
} }
} }
else if ( !strcmp(arg, "--help") ) { help(stdout, argv0); exit(0); } else if ( !strcmp(arg, "--help") )
else if ( !strcmp(arg, "--version") ) { version(stdout, argv0); exit(0); } help(stdout, argv0), exit(0);
else if ( !strcmp(arg, "--version") )
version(stdout, argv0), exit(0);
else if ( GET_OPTION_VARIABLE("--cp", &cp) ) { } else if ( GET_OPTION_VARIABLE("--cp", &cp) ) { }
else if ( GET_OPTION_VARIABLE("--diff", &diff) ) { } else if ( GET_OPTION_VARIABLE("--diff", &diff) ) { }
else if ( GET_OPTION_VARIABLE("--normalized", &input_normalized_path) ) { } else if ( GET_OPTION_VARIABLE("--normalized", &input_normalized_path) ) { }
@ -110,7 +114,7 @@ int main(int argc, char* argv[])
else if ( GET_OPTION_VARIABLE("--tmp", &tmp) ) { } else if ( GET_OPTION_VARIABLE("--tmp", &tmp) ) { }
else else
{ {
fprintf(stderr, "%s: unknown option: `%s'\n", argv0, arg); fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
help(stderr, argv0); help(stderr, argv0);
exit(1); exit(1);
} }
@ -122,7 +126,7 @@ int main(int argc, char* argv[])
exit(0); exit(0);
} }
CompactArguments(&argc, &argv); compact_arguments(&argc, &argv);
if ( argc <= 1 ) if ( argc <= 1 )
{ {

View File

@ -45,15 +45,18 @@
#include "util.h" #include "util.h"
void help(FILE* fp, const char* argv0) static void help(FILE* fp, const char* argv0)
{ {
fprintf(fp, "Usage: %s [OPTION]... PORT-TIX\n", argv0); fprintf(fp, "Usage: %s [OPTION]... PORT-TIX\n", argv0);
fprintf(fp, "Converts an archived port tix into an archived source tix.\n"); fprintf(fp, "Converts an archived port tix into an archived source tix.\n");
} }
void version(FILE* fp, const char* argv0) static void version(FILE* fp, const char* argv0)
{ {
help(fp, argv0); fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR);
fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n");
fprintf(fp, "This is free software: you are free to change and redistribute it.\n");
fprintf(fp, "There is NO WARRANTY, to the extent permitted by law.\n");
} }
bool is_file_name(const char* path) bool is_file_name(const char* path)
@ -75,7 +78,7 @@ int main(int argc, char* argv[])
for ( int i = 0; i < argc; i++ ) for ( int i = 0; i < argc; i++ )
{ {
const char* arg = argv[i]; const char* arg = argv[i];
if ( arg[0] != '-' ) if ( arg[0] != '-' || !arg[1] )
continue; continue;
argv[i] = NULL; argv[i] = NULL;
if ( !strcmp(arg, "--") ) if ( !strcmp(arg, "--") )
@ -85,13 +88,15 @@ int main(int argc, char* argv[])
while ( char c = *++arg ) switch ( c ) while ( char c = *++arg ) switch ( c )
{ {
default: default:
fprintf(stderr, "%s: unknown option -- `%c'\n", argv0, c); fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, c);
help(stderr, argv0); help(stderr, argv0);
exit(1); exit(1);
} }
} }
else if ( !strcmp(arg, "--help") ) { help(stdout, argv0); exit(0); } else if ( !strcmp(arg, "--help") )
else if ( !strcmp(arg, "--version") ) { version(stdout, argv0); exit(0); } help(stdout, argv0), exit(0);
else if ( !strcmp(arg, "--version") )
version(stdout, argv0), exit(0);
else if ( GET_OPTION_VARIABLE("--output-directory", &output_directory) ) { } else if ( GET_OPTION_VARIABLE("--output-directory", &output_directory) ) { }
else if ( GET_OPTION_VARIABLE("--output", &output) ) { } else if ( GET_OPTION_VARIABLE("--output", &output) ) { }
else if ( GET_OPTION_VARIABLE("--patch", &patch) ) { } else if ( GET_OPTION_VARIABLE("--patch", &patch) ) { }
@ -101,7 +106,7 @@ int main(int argc, char* argv[])
else if ( GET_OPTION_VARIABLE("--tmp", &tmp) ) { } else if ( GET_OPTION_VARIABLE("--tmp", &tmp) ) { }
else else
{ {
fprintf(stderr, "%s: unknown option: `%s'\n", argv0, arg); fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
help(stderr, argv0); help(stderr, argv0);
exit(1); exit(1);
} }
@ -113,21 +118,13 @@ int main(int argc, char* argv[])
exit(0); exit(0);
} }
CompactArguments(&argc, &argv); compact_arguments(&argc, &argv);
if ( argc <= 1 ) if ( argc <= 1 )
{ error(1, 0, "No archived port tix specified");
fprintf(stderr, "%s: no archived port tix specified\n", argv0);
help(stderr, argv0);
exit(1);
}
if ( 3 <= argc ) if ( 3 <= argc )
{ error(1, 0, "extra operand");
fprintf(stderr, "%s: unexpected extra operand `%s'\n", argv0, argv[2]);
help(stderr, argv0);
exit(1);
}
const char* porttix_path = argv[1]; const char* porttix_path = argv[1];

View File

@ -800,20 +800,18 @@ void PurifyMakeflags()
string_array_reset(&makeflags); string_array_reset(&makeflags);
} }
void Usage(FILE* fp, const char* argv0) static void help(FILE* fp, const char* argv0)
{ {
fprintf(fp, "Usage: %s [OPTION]... PACKAGE\n", argv0); fprintf(fp, "Usage: %s [OPTION]... PACKAGE\n", argv0);
fprintf(fp, "Compile a source tix into a tix suitable for installation.\n"); fprintf(fp, "Compile a source tix into a tix suitable for installation.\n");
} }
void Help(FILE* fp, const char* argv0) static void version(FILE* fp, const char* argv0)
{ {
Usage(fp, argv0); fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR);
} fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n");
fprintf(fp, "This is free software: you are free to change and redistribute it.\n");
void Version(FILE* fp, const char* argv0) fprintf(fp, "There is NO WARRANTY, to the extent permitted by law.\n");
{
Usage(fp, argv0);
} }
int main(int argc, char* argv[]) int main(int argc, char* argv[])
@ -839,7 +837,7 @@ int main(int argc, char* argv[])
for ( int i = 0; i < argc; i++ ) for ( int i = 0; i < argc; i++ )
{ {
const char* arg = argv[i]; const char* arg = argv[i];
if ( arg[0] != '-' ) if ( arg[0] != '-' || !arg[1] )
continue; continue;
argv[i] = NULL; argv[i] = NULL;
if ( !strcmp(arg, "--") ) if ( !strcmp(arg, "--") )
@ -849,14 +847,15 @@ int main(int argc, char* argv[])
while ( char c = *++arg ) switch ( c ) while ( char c = *++arg ) switch ( c )
{ {
default: default:
fprintf(stderr, "%s: unknown option -- `%c'\n", argv0, c); fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, c);
Usage(stderr, argv0); help(stderr, argv0);
exit(1); exit(1);
} }
} }
else if ( !strcmp(arg, "--help") ) { Help(stdout, argv0); exit(0); } else if ( !strcmp(arg, "--help") )
else if ( !strcmp(arg, "--usage") ) { Usage(stdout, argv0); exit(0); } help(stdout, argv0), exit(0);
else if ( !strcmp(arg, "--version") ) { Version(stdout, argv0); exit(0); } else if ( !strcmp(arg, "--version") )
version(stdout, argv0), exit(0);
else if ( GET_OPTION_VARIABLE("--build", &minfo.build) ) { } else if ( GET_OPTION_VARIABLE("--build", &minfo.build) ) { }
else if ( GET_OPTION_VARIABLE("--destination", &minfo.destination) ) { } else if ( GET_OPTION_VARIABLE("--destination", &minfo.destination) ) { }
else if ( GET_OPTION_VARIABLE("--end", &end_step_string) ) { } else if ( GET_OPTION_VARIABLE("--end", &end_step_string) ) { }
@ -872,8 +871,8 @@ int main(int argc, char* argv[])
else if ( GET_OPTION_VARIABLE("--tmp", &minfo.tmp) ) { } else if ( GET_OPTION_VARIABLE("--tmp", &minfo.tmp) ) { }
else else
{ {
fprintf(stderr, "%s: unknown option: `%s'\n", argv0, arg); fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
Usage(stderr, argv0); help(stderr, argv0);
exit(1); exit(1);
} }
} }
@ -881,24 +880,22 @@ int main(int argc, char* argv[])
if ( !(minfo.start_step = step_of_step_name(start_step_string)) ) if ( !(minfo.start_step = step_of_step_name(start_step_string)) )
{ {
fprintf(stderr, "%s: no such step `%s'\n", argv0, start_step_string); fprintf(stderr, "%s: no such step `%s'\n", argv0, start_step_string);
Usage(stderr, argv0);
exit(1); exit(1);
} }
if ( !(minfo.end_step = step_of_step_name(end_step_string)) ) if ( !(minfo.end_step = step_of_step_name(end_step_string)) )
{ {
fprintf(stderr, "%s: no such step `%s'\n", argv0, end_step_string); fprintf(stderr, "%s: no such step `%s'\n", argv0, end_step_string);
Usage(stderr, argv0);
exit(1); exit(1);
} }
if ( argc == 1 ) if ( argc == 1 )
{ {
Usage(stdout, argv0); help(stdout, argv0);
exit(0); exit(0);
} }
CompactArguments(&argc, &argv); compact_arguments(&argc, &argv);
if ( minfo.prefix && !strcmp(minfo.prefix, "/") ) if ( minfo.prefix && !strcmp(minfo.prefix, "/") )
minfo.prefix[0] = '\0'; minfo.prefix[0] = '\0';
@ -906,14 +903,12 @@ int main(int argc, char* argv[])
if ( argc < 2 ) if ( argc < 2 )
{ {
fprintf(stderr, "%s: no package specified\n", argv0); fprintf(stderr, "%s: no package specified\n", argv0);
Usage(stderr, argv0);
exit(1); exit(1);
} }
if ( 2 < argc ) if ( 2 < argc )
{ {
fprintf(stderr, "%s: unexpected extra operand `%s'\n", argv0, argv[2]); fprintf(stderr, "%s: unexpected extra operand `%s'\n", argv0, argv[2]);
Usage(stderr, argv0);
exit(1); exit(1);
} }

View File

@ -44,20 +44,18 @@
#include "util.h" #include "util.h"
void Usage(FILE* fp, const char* argv0) static void help(FILE* fp, const char* argv0)
{ {
fprintf(fp, "Usage: %s PREFIX [OPTION]... COMMAND\n", argv0); fprintf(fp, "Usage: %s PREFIX [OPTION]... COMMAND\n", argv0);
fprintf(fp, "Administer and configure a tix collection.\n"); fprintf(fp, "Administer and configure a tix collection.\n");
} }
void Help(FILE* fp, const char* argv0) static void version(FILE* fp, const char* argv0)
{ {
Usage(fp, argv0); fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR);
} fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n");
fprintf(fp, "This is free software: you are free to change and redistribute it.\n");
void Version(FILE* fp, const char* argv0) fprintf(fp, "There is NO WARRANTY, to the extent permitted by law.\n");
{
Usage(fp, argv0);
} }
int main(int argc, char* argv[]) int main(int argc, char* argv[])
@ -81,7 +79,7 @@ int main(int argc, char* argv[])
for ( int i = 0; i < argc; i++ ) for ( int i = 0; i < argc; i++ )
{ {
const char* arg = argv[i]; const char* arg = argv[i];
if ( arg[0] != '-' ) if ( arg[0] != '-' || !arg[1] )
continue; continue;
argv[i] = NULL; argv[i] = NULL;
if ( !strcmp(arg, "--") ) if ( !strcmp(arg, "--") )
@ -91,34 +89,37 @@ int main(int argc, char* argv[])
while ( char c = *++arg ) switch ( c ) while ( char c = *++arg ) switch ( c )
{ {
default: default:
fprintf(stderr, "%s: unknown option -- `%c'\n", argv0, c); fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, c);
Usage(stderr, argv0); help(stderr, argv0);
exit(1); exit(1);
} }
} }
else if ( !strcmp(arg, "--help") ) { Help(stdout, argv0); exit(0); } else if ( !strcmp(arg, "--help") )
else if ( !strcmp(arg, "--usage") ) { Usage(stdout, argv0); exit(0); } help(stdout, argv0), exit(0);
else if ( !strcmp(arg, "--version") ) { Version(stdout, argv0); exit(0); } else if ( !strcmp(arg, "--version") )
version(stdout, argv0), exit(0);
else if ( GET_OPTION_VARIABLE("--collection", &collection) ) { } else if ( GET_OPTION_VARIABLE("--collection", &collection) ) { }
else if ( GET_OPTION_VARIABLE("--platform", &platform) ) { } else if ( GET_OPTION_VARIABLE("--platform", &platform) ) { }
else if ( GET_OPTION_VARIABLE("--prefix", &prefix) ) { } else if ( GET_OPTION_VARIABLE("--prefix", &prefix) ) { }
else if ( !strcmp(arg, "--enable-multiarch") ) { use_multiarch = true; } else if ( !strcmp(arg, "--enable-multiarch") )
else if ( !strcmp(arg, "--disable-multiarch") ) { use_multiarch = false; } use_multiarch = true;
else if ( !strcmp(arg, "--disable-multiarch") )
use_multiarch = false;
else else
{ {
fprintf(stderr, "%s: unknown option: `%s'\n", argv0, arg); fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
Usage(stderr, argv0); help(stderr, argv0);
exit(1); exit(1);
} }
} }
if ( argc == 1 ) if ( argc == 1 )
{ {
Usage(stdout, argv0); help(stdout, argv0);
exit(0); exit(0);
} }
CompactArguments(&argc, &argv); compact_arguments(&argc, &argv);
ParseOptionalCommandLineCollectionPrefix(&collection, &argc, &argv); ParseOptionalCommandLineCollectionPrefix(&collection, &argc, &argv);
VerifyCommandLineCollection(&collection); VerifyCommandLineCollection(&collection);
@ -129,7 +130,6 @@ int main(int argc, char* argv[])
if ( argc == 1 ) if ( argc == 1 )
{ {
error(0, 0, "error: no command specified."); error(0, 0, "error: no command specified.");
Usage(stderr, argv0);
exit(1); exit(1);
} }
@ -189,7 +189,6 @@ int main(int argc, char* argv[])
else else
{ {
fprintf(stderr, "%s: unknown command: `%s'\n", argv0, cmd); fprintf(stderr, "%s: unknown command: `%s'\n", argv0, cmd);
Usage(stderr, argv0);
exit(1); exit(1);
} }

View File

@ -145,15 +145,18 @@ void execdiff(int tree_a, const char* tree_a_path,
closedir(dir_b); closedir(dir_b);
} }
void help(FILE* fp, const char* argv0) static void help(FILE* fp, const char* argv0)
{ {
fprintf(fp, "Usage: %s [OPTION]... TREE-A TREE-B\n", argv0); fprintf(fp, "Usage: %s [OPTION]... TREE-A TREE-B\n", argv0);
fprintf(fp, "Reports which files have had the executable bit changed between two trees.\n"); fprintf(fp, "Reports which files have had the executable bit changed between two trees.\n");
} }
void version(FILE* fp, const char* argv0) static void version(FILE* fp, const char* argv0)
{ {
help(fp, argv0); fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR);
fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n");
fprintf(fp, "This is free software: you are free to change and redistribute it.\n");
fprintf(fp, "There is NO WARRANTY, to the extent permitted by law.\n");
} }
int main(int argc, char* argv[]) int main(int argc, char* argv[])
@ -162,7 +165,7 @@ int main(int argc, char* argv[])
for ( int i = 0; i < argc; i++ ) for ( int i = 0; i < argc; i++ )
{ {
const char* arg = argv[i]; const char* arg = argv[i];
if ( arg[0] != '-' ) if ( arg[0] != '-' || !arg[1] )
continue; continue;
argv[i] = NULL; argv[i] = NULL;
if ( !strcmp(arg, "--") ) if ( !strcmp(arg, "--") )
@ -172,16 +175,18 @@ int main(int argc, char* argv[])
while ( char c = *++arg ) switch ( c ) while ( char c = *++arg ) switch ( c )
{ {
default: default:
fprintf(stderr, "%s: unknown option -- `%c'\n", argv0, c); fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, c);
help(stderr, argv0); help(stderr, argv0);
exit(1); exit(1);
} }
} }
else if ( !strcmp(arg, "--help") ) { help(stdout, argv0); exit(0); } else if ( !strcmp(arg, "--help") )
else if ( !strcmp(arg, "--version") ) { version(stdout, argv0); exit(0); } help(stdout, argv0), exit(0);
else if ( !strcmp(arg, "--version") )
version(stdout, argv0), exit(0);
else else
{ {
fprintf(stderr, "%s: unknown option: `%s'\n", argv0, arg); fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
help(stderr, argv0); help(stderr, argv0);
exit(1); exit(1);
} }
@ -193,21 +198,13 @@ int main(int argc, char* argv[])
exit(0); exit(0);
} }
CompactArguments(&argc, &argv); compact_arguments(&argc, &argv);
if ( argc < 3 ) if ( argc < 3 )
{ error(1, 0, "You need to specify two directories");
fprintf(stderr, "%s: you need to specify two directories\n", argv0);
help(stderr, argv0);
exit(1);
}
if ( 3 < argc ) if ( 3 < argc )
{ error(1, 0, "extra operand");
fprintf(stderr, "%s: unexpected extra operand `%s'\n", argv0, argv[2]);
help(stderr, argv0);
exit(1);
}
const char* tree_a_path = argv[1]; const char* tree_a_path = argv[1];
int tree_a = open(tree_a_path, O_RDONLY | O_DIRECTORY); int tree_a = open(tree_a_path, O_RDONLY | O_DIRECTORY);

View File

@ -173,15 +173,18 @@ bool execpatch(FILE* input, const char* input_path, bool check)
return result; return result;
} }
void help(FILE* fp, const char* argv0) static void help(FILE* fp, const char* argv0)
{ {
fprintf(fp, "Usage: %s [OPTION]... [PATCH]\n", argv0); fprintf(fp, "Usage: %s [OPTION]... [PATCH]\n", argv0);
fprintf(fp, "Patches the executable bits of files in the current source directory.\n"); fprintf(fp, "Patches the executable bits of files in the current source directory.\n");
} }
void version(FILE* fp, const char* argv0) static void version(FILE* fp, const char* argv0)
{ {
help(fp, argv0); fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR);
fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n");
fprintf(fp, "This is free software: you are free to change and redistribute it.\n");
fprintf(fp, "There is NO WARRANTY, to the extent permitted by law.\n");
} }
int main(int argc, char* argv[]) int main(int argc, char* argv[])
@ -193,7 +196,7 @@ int main(int argc, char* argv[])
for ( int i = 0; i < argc; i++ ) for ( int i = 0; i < argc; i++ )
{ {
const char* arg = argv[i]; const char* arg = argv[i];
if ( arg[0] != '-' ) if ( arg[0] != '-' || !arg[1] )
continue; continue;
argv[i] = NULL; argv[i] = NULL;
if ( !strcmp(arg, "--") ) if ( !strcmp(arg, "--") )
@ -204,31 +207,30 @@ int main(int argc, char* argv[])
{ {
case 'c': check = true; break; case 'c': check = true; break;
default: default:
fprintf(stderr, "%s: unknown option -- `%c'\n", argv0, c); fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, c);
help(stderr, argv0); help(stderr, argv0);
exit(1); exit(1);
} }
} }
else if ( !strcmp(arg, "--help") ) { help(stdout, argv0); exit(0); } else if ( !strcmp(arg, "--help") )
else if ( !strcmp(arg, "--version") ) { version(stdout, argv0); exit(0); } help(stdout, argv0), exit(0);
else if ( !strcmp(arg, "--check") ) { check = true; } else if ( !strcmp(arg, "--version") )
version(stdout, argv0), exit(0);
else if ( !strcmp(arg, "--check") )
check = true;
else if ( GET_OPTION_VARIABLE("--directory", &directory) ) { } else if ( GET_OPTION_VARIABLE("--directory", &directory) ) { }
else else
{ {
fprintf(stderr, "%s: unknown option: `%s'\n", argv0, arg); fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
help(stderr, argv0); help(stderr, argv0);
exit(1); exit(1);
} }
} }
CompactArguments(&argc, &argv); compact_arguments(&argc, &argv);
if ( 2 < argc ) if ( 2 < argc )
{ error(1, 0, "extra operand");
fprintf(stderr, "%s: unexpected extra operand `%s'\n", argv0, argv[2]);
help(stderr, argv0);
exit(1);
}
const char* input_path = "<stdin>"; const char* input_path = "<stdin>";
FILE* input = stdin; FILE* input = stdin;

View File

@ -142,20 +142,18 @@ void MarkPackageAsInstalled(const char* tixdb_path, const char* package)
free(installed_list_path); free(installed_list_path);
} }
void Usage(FILE* fp, const char* argv0) static void help(FILE* fp, const char* argv0)
{ {
fprintf(fp, "Usage: %s [OPTION]... --collection=PREFIX PACKAGE\n", argv0); fprintf(fp, "Usage: %s [OPTION]... --collection=PREFIX PACKAGE\n", argv0);
fprintf(fp, "Install a tix into a tix collection.\n"); fprintf(fp, "Install a tix into a tix collection.\n");
} }
void Help(FILE* fp, const char* argv0) static void version(FILE* fp, const char* argv0)
{ {
Usage(fp, argv0); fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR);
} fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n");
fprintf(fp, "This is free software: you are free to change and redistribute it.\n");
void Version(FILE* fp, const char* argv0) fprintf(fp, "There is NO WARRANTY, to the extent permitted by law.\n");
{
Usage(fp, argv0);
} }
int main(int argc, char* argv[]) int main(int argc, char* argv[])
@ -169,7 +167,7 @@ int main(int argc, char* argv[])
for ( int i = 0; i < argc; i++ ) for ( int i = 0; i < argc; i++ )
{ {
const char* arg = argv[i]; const char* arg = argv[i];
if ( arg[0] != '-' ) if ( arg[0] != '-' || !arg[1] )
continue; continue;
argv[i] = NULL; argv[i] = NULL;
if ( !strcmp(arg, "--") ) if ( !strcmp(arg, "--") )
@ -179,38 +177,39 @@ int main(int argc, char* argv[])
while ( char c = *++arg ) switch ( c ) while ( char c = *++arg ) switch ( c )
{ {
default: default:
fprintf(stderr, "%s: unknown option -- `%c'\n", argv0, c); fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, c);
Usage(stderr, argv0); help(stderr, argv0);
exit(1); exit(1);
} }
} }
else if ( !strcmp(arg, "--help") ) { Help(stdout, argv0); exit(0); } else if ( !strcmp(arg, "--help") )
else if ( !strcmp(arg, "--usage") ) { Usage(stdout, argv0); exit(0); } help(stdout, argv0), exit(0);
else if ( !strcmp(arg, "--version") ) { Version(stdout, argv0); exit(0); } else if ( !strcmp(arg, "--version") )
version(stdout, argv0), exit(0);
else if ( GET_OPTION_VARIABLE("--collection", &collection) ) { } else if ( GET_OPTION_VARIABLE("--collection", &collection) ) { }
else if ( GET_OPTION_VARIABLE("--prefix", &prefix) ) { } else if ( GET_OPTION_VARIABLE("--prefix", &prefix) ) { }
else if ( GET_OPTION_VARIABLE("--tar", &tar) ) { } else if ( GET_OPTION_VARIABLE("--tar", &tar) ) { }
else if ( !strcmp(arg, "--reinstall") ) { reinstall = true; } else if ( !strcmp(arg, "--reinstall") )
reinstall = true;
else else
{ {
fprintf(stderr, "%s: unknown option: `%s'\n", argv0, arg); fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
Usage(stderr, argv0); help(stderr, argv0);
exit(1); exit(1);
} }
} }
if ( argc == 1 ) if ( argc == 1 )
{ {
Usage(stdout, argv0); help(stdout, argv0);
exit(0); exit(0);
} }
CompactArguments(&argc, &argv); compact_arguments(&argc, &argv);
if ( argc <= 1 ) if ( argc <= 1 )
{ {
fprintf(stderr, "%s: no package specified\n", argv0); fprintf(stderr, "%s: no package specified\n", argv0);
Usage(stderr, argv0);
exit(1); exit(1);
} }
@ -222,7 +221,6 @@ int main(int argc, char* argv[])
fprintf(stderr, "%s: no collection prefix specified, use --collection " fprintf(stderr, "%s: no collection prefix specified, use --collection "
"or TIX_COLLECTION to specify where the package will " "or TIX_COLLECTION to specify where the package will "
"installed.\n", argv0); "installed.\n", argv0);
Usage(stderr, argv0);
exit(1); exit(1);
} }

View File

@ -166,15 +166,18 @@ bool rmpatch(FILE* input, const char* input_path, bool check)
return result; return result;
} }
void help(FILE* fp, const char* argv0) static void help(FILE* fp, const char* argv0)
{ {
fprintf(fp, "Usage: %s [OPTION]... [PATCH]\n", argv0); fprintf(fp, "Usage: %s [OPTION]... [PATCH]\n", argv0);
fprintf(fp, "Removes files from the current source directory.\n"); fprintf(fp, "Removes files from the current source directory.\n");
} }
void version(FILE* fp, const char* argv0) static void version(FILE* fp, const char* argv0)
{ {
help(fp, argv0); fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR);
fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n");
fprintf(fp, "This is free software: you are free to change and redistribute it.\n");
fprintf(fp, "There is NO WARRANTY, to the extent permitted by law.\n");
} }
int main(int argc, char* argv[]) int main(int argc, char* argv[])
@ -186,7 +189,7 @@ int main(int argc, char* argv[])
for ( int i = 0; i < argc; i++ ) for ( int i = 0; i < argc; i++ )
{ {
const char* arg = argv[i]; const char* arg = argv[i];
if ( arg[0] != '-' ) if ( arg[0] != '-' || !arg[1] )
continue; continue;
argv[i] = NULL; argv[i] = NULL;
if ( !strcmp(arg, "--") ) if ( !strcmp(arg, "--") )
@ -202,26 +205,25 @@ int main(int argc, char* argv[])
exit(1); exit(1);
} }
} }
else if ( !strcmp(arg, "--help") ) { help(stdout, argv0); exit(0); } else if ( !strcmp(arg, "--help") )
else if ( !strcmp(arg, "--version") ) { version(stdout, argv0); exit(0); } help(stdout, argv0), exit(0);
else if ( !strcmp(arg, "--check") ) { check = true; } else if ( !strcmp(arg, "--version") )
version(stdout, argv0), exit(0);
else if ( !strcmp(arg, "--check") )
check = true;
else if ( GET_OPTION_VARIABLE("--directory", &directory) ) { } else if ( GET_OPTION_VARIABLE("--directory", &directory) ) { }
else else
{ {
fprintf(stderr, "%s: unknown option: `%s'\n", argv0, arg); fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
help(stderr, argv0); help(stderr, argv0);
exit(1); exit(1);
} }
} }
CompactArguments(&argc, &argv); compact_arguments(&argc, &argv);
if ( 2 < argc ) if ( 2 < argc )
{ error(1, 0, "extra operand");
fprintf(stderr, "%s: unexpected extra operand `%s'\n", argv0, argv[2]);
help(stderr, argv0);
exit(1);
}
const char* input_path = "<stdin>"; const char* input_path = "<stdin>";
FILE* input = stdin; FILE* input = stdin;

View File

@ -151,20 +151,18 @@ void InstallPackageOfName(params_t* params, const char* pkg_name)
free(pkg_path); free(pkg_path);
} }
void Usage(FILE* fp, const char* argv0) static void help(FILE* fp, const char* argv0)
{ {
fprintf(fp, "Usage: %s PREFIX COMMAND [OPTION]...\n", argv0); fprintf(fp, "Usage: %s PREFIX COMMAND [OPTION]...\n", argv0);
fprintf(fp, "Front end to the Tix package management system.\n"); fprintf(fp, "Front end to the Tix package management system.\n");
} }
void Help(FILE* fp, const char* argv0) static void version(FILE* fp, const char* argv0)
{ {
Usage(fp, argv0); fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR);
} fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n");
fprintf(fp, "This is free software: you are free to change and redistribute it.\n");
void Version(FILE* fp, const char* argv0) fprintf(fp, "There is NO WARRANTY, to the extent permitted by law.\n");
{
Usage(fp, argv0);
} }
int main(int argc, char* argv[]) int main(int argc, char* argv[])
@ -178,7 +176,7 @@ int main(int argc, char* argv[])
for ( int i = 0; i < argc; i++ ) for ( int i = 0; i < argc; i++ )
{ {
const char* arg = argv[i]; const char* arg = argv[i];
if ( arg[0] != '-' ) if ( arg[0] != '-' || !arg[1] )
continue; continue;
argv[i] = NULL; argv[i] = NULL;
if ( !strcmp(arg, "--") ) if ( !strcmp(arg, "--") )
@ -188,32 +186,33 @@ int main(int argc, char* argv[])
while ( char c = *++arg ) switch ( c ) while ( char c = *++arg ) switch ( c )
{ {
default: default:
fprintf(stderr, "%s: unknown option -- `%c'\n", argv0, c); fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, c);
Usage(stderr, argv0); help(stderr, argv0);
exit(1); exit(1);
} }
} }
else if ( !strcmp(arg, "--help") ) { Help(stdout, argv0); exit(0); } else if ( !strcmp(arg, "--help") )
else if ( !strcmp(arg, "--usage") ) { Usage(stdout, argv0); exit(0); } help(stdout, argv0), exit(0);
else if ( !strcmp(arg, "--version") ) { Version(stdout, argv0); exit(0); } else if ( !strcmp(arg, "--version") )
version(stdout, argv0), exit(0);
else if ( GET_OPTION_VARIABLE("--collection", &params.collection) ) { } else if ( GET_OPTION_VARIABLE("--collection", &params.collection) ) { }
else if ( GET_OPTION_VARIABLE("--tar", &params.tar) ) { } else if ( GET_OPTION_VARIABLE("--tar", &params.tar) ) { }
else if ( GET_OPTION_VARIABLE("--tix-install", &params.tix_install) ) { } else if ( GET_OPTION_VARIABLE("--tix-install", &params.tix_install) ) { }
else else
{ {
fprintf(stderr, "%s: unknown option: `%s'\n", argv0, arg); fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
Usage(stderr, argv0); help(stderr, argv0);
exit(1); exit(1);
} }
} }
if ( argc == 1 ) if ( argc == 1 )
{ {
Usage(stdout, argv0); help(stdout, argv0);
exit(0); exit(0);
} }
CompactArguments(&argc, &argv); compact_arguments(&argc, &argv);
ParseOptionalCommandLineCollectionPrefix(&params.collection, &argc, &argv); ParseOptionalCommandLineCollectionPrefix(&params.collection, &argc, &argv);
VerifyCommandLineCollection(&params.collection); VerifyCommandLineCollection(&params.collection);
@ -242,7 +241,6 @@ int main(int argc, char* argv[])
if ( argc == 1 ) if ( argc == 1 )
{ {
error(0, 0, "error: no command specified."); error(0, 0, "error: no command specified.");
Usage(stderr, argv0);
exit(1); exit(1);
} }
@ -252,7 +250,6 @@ int main(int argc, char* argv[])
if ( argc == 2 ) if ( argc == 2 )
{ {
error(0, 0, "expected list of packages to install after `install'"); error(0, 0, "expected list of packages to install after `install'");
Usage(stderr, argv0);
exit(1); exit(1);
} }
@ -280,7 +277,6 @@ int main(int argc, char* argv[])
else else
{ {
fprintf(stderr, "%s: unknown command: `%s'\n", argv0, cmd); fprintf(stderr, "%s: unknown command: `%s'\n", argv0, cmd);
Usage(stderr, argv0);
exit(1); exit(1);
} }
} }

View File

@ -443,14 +443,16 @@ int mkdir_p(const char* path, mode_t mode)
return 0; return 0;
} }
void CompactArguments(int* argc, char*** argv) static void compact_arguments(int* argc, char*** argv)
{ {
for ( int i = 0; i < *argc; i++ ) for ( int i = 0; i < *argc; i++ )
while ( i < *argc && !(*argv)[i] )
{ {
for ( int n = i; n < *argc; n++ ) while ( i < *argc && !(*argv)[i] )
(*argv)[n] = (*argv)[n+1]; {
(*argc)--; for ( int n = i; n < *argc; n++ )
(*argv)[n] = (*argv)[n+1];
(*argc)--;
}
} }
} }
@ -708,7 +710,7 @@ void ParseOptionalCommandLineCollectionPrefix(char** collection, int* argcp,
free(*collection); free(*collection);
*collection = strdup((*argvp)[1]); *collection = strdup((*argvp)[1]);
(*argvp)[1] = NULL; (*argvp)[1] = NULL;
CompactArguments(argcp, argvp); compact_arguments(argcp, argvp);
} }
} }
@ -1009,13 +1011,13 @@ retry_ask_recovery_method:
selection = (int) strtol(input, &input_end, 0); selection = (int) strtol(input, &input_end, 0);
if ( *input_end ) if ( *input_end )
{ {
error(0, 0, "error: `%s' is not an allowed choice\n", input); error(0, 0, "error: `%s' is not an allowed choice", input);
goto retry_ask_recovery_method; goto retry_ask_recovery_method;
} }
if ( 5 < selection ) if ( 5 < selection )
{ {
error(0, 0, "error: `%i' is not an allowed choice\n", selection); error(0, 0, "error: `%i' is not an allowed choice", selection);
goto retry_ask_recovery_method; goto retry_ask_recovery_method;
} }
} }

View File

@ -31,10 +31,6 @@
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
#if !defined(VERSIONSTR)
#define VERSIONSTR "unknown version"
#endif
static bool cat_fd(int fd, const char* path) static bool cat_fd(int fd, const char* path)
{ {
struct stat st; struct stat st;
@ -95,12 +91,14 @@ static bool cat_arguments(int argc, char* argv[])
static void compact_arguments(int* argc, char*** argv) static void compact_arguments(int* argc, char*** argv)
{ {
for ( int i = 0; i < *argc; i++ ) for ( int i = 0; i < *argc; i++ )
{
while ( i < *argc && !(*argv)[i] ) while ( i < *argc && !(*argv)[i] )
{ {
for ( int n = i; n < *argc; n++ ) for ( int n = i; n < *argc; n++ )
(*argv)[n] = (*argv)[n+1]; (*argv)[n] = (*argv)[n+1];
(*argc)--; (*argc)--;
} }
}
} }
static void help(FILE* fp, const char* argv0) static void help(FILE* fp, const char* argv0)

View File

@ -39,10 +39,6 @@
#include <termios.h> #include <termios.h>
#include <unistd.h> #include <unistd.h>
#if !defined(VERSIONSTR)
#define VERSIONSTR "unknown version"
#endif
bool SetCurrentMode(struct dispmsg_crtc_mode mode) bool SetCurrentMode(struct dispmsg_crtc_mode mode)
{ {
struct dispmsg_set_crtc_mode msg; struct dispmsg_set_crtc_mode msg;
@ -177,7 +173,7 @@ static void compact_arguments(int* argc, char*** argv)
} }
} }
void help(FILE* fp, const char* argv0) static void help(FILE* fp, const char* argv0)
{ {
fprintf(fp, "Usage: %s [OPTION ...] [-- PROGRAM-TO-RUN [ARG ...]]\n", argv0); fprintf(fp, "Usage: %s [OPTION ...] [-- PROGRAM-TO-RUN [ARG ...]]\n", argv0);
fprintf(fp, "Changes the video mode and optionally runs a program\n"); fprintf(fp, "Changes the video mode and optionally runs a program\n");
@ -196,7 +192,7 @@ void help(FILE* fp, const char* argv0)
fprintf(fp, " --height=NUM, --min-heigh= NUM, --max-height=NUM\n"); fprintf(fp, " --height=NUM, --min-heigh= NUM, --max-height=NUM\n");
} }
void version(FILE* fp, const char* argv0) static void version(FILE* fp, const char* argv0)
{ {
fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR); fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR);
fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n"); fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n");
@ -297,8 +293,8 @@ int main(int argc, char* argv[])
for ( int i = 1; i < argc; i++ ) for ( int i = 1; i < argc; i++ )
{ {
const char* arg = argv[i]; const char* arg = argv[i];
if ( arg[0] != '-' ) if ( arg[0] != '-' || !arg[1] )
break; break; // Intentionally not continue.
argv[i] = NULL; argv[i] = NULL;
if ( !strcmp(arg, "--") ) if ( !strcmp(arg, "--") )
break; break;

View File

@ -32,10 +32,6 @@
#include <termios.h> #include <termios.h>
#include <wchar.h> #include <wchar.h>
#if !defined(VERSIONSTR)
#define VERSIONSTR "unknown version"
#endif
struct line struct line
{ {
const char* string; const char* string;
@ -138,7 +134,7 @@ bool append_lines_from_file(FILE* fp,
} }
} }
void compact_arguments(int* argc, char*** argv) static void compact_arguments(int* argc, char*** argv)
{ {
for ( int i = 0; i < *argc; i++ ) for ( int i = 0; i < *argc; i++ )
{ {
@ -151,7 +147,7 @@ void compact_arguments(int* argc, char*** argv)
} }
} }
void help(FILE* fp, const char* argv0) static void help(FILE* fp, const char* argv0)
{ {
fprintf(fp, "Usage: %s [OPTION]... FILE...\n", argv0); fprintf(fp, "Usage: %s [OPTION]... FILE...\n", argv0);
fprintf(fp, "Columnate lists.\n"); fprintf(fp, "Columnate lists.\n");
@ -162,7 +158,7 @@ void help(FILE* fp, const char* argv0)
fprintf(fp, " --version output version information and exit\n"); fprintf(fp, " --version output version information and exit\n");
} }
void version(FILE* fp, const char* argv0) static void version(FILE* fp, const char* argv0)
{ {
fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR); fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR);
fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n"); fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n");
@ -191,7 +187,7 @@ int main(int argc, char* argv[])
for ( int i = 1; i < argc; i++ ) for ( int i = 1; i < argc; i++ )
{ {
const char* arg = argv[i]; const char* arg = argv[i];
if ( arg[0] != '-' ) if ( arg[0] != '-' || !arg[1] )
continue; continue;
argv[i] = NULL; argv[i] = NULL;
if ( !strcmp(arg, "--") ) if ( !strcmp(arg, "--") )

View File

@ -35,10 +35,6 @@
#include <timespec.h> #include <timespec.h>
#include <unistd.h> #include <unistd.h>
#if !defined(VERSIONSTR)
#define VERSIONSTR "unknown version"
#endif
const char* BaseName(const char* path) const char* BaseName(const char* path)
{ {
size_t len = strlen(path); size_t len = strlen(path);
@ -419,7 +415,7 @@ bool CopyAmbigious(int srcdirfd, const char* srcrel, const char* srcpath,
flags, symbolic_dereference); flags, symbolic_dereference);
} }
void compact_arguments(int* argc, char*** argv) static void compact_arguments(int* argc, char*** argv)
{ {
for ( int i = 0; i < *argc; i++ ) for ( int i = 0; i < *argc; i++ )
{ {
@ -432,7 +428,7 @@ void compact_arguments(int* argc, char*** argv)
} }
} }
void help(FILE* fp, const char* argv0) static void help(FILE* fp, const char* argv0)
{ {
fprintf(fp, "Usage: %s [OPTION]... [-T] SOURCE DEST\n", argv0); fprintf(fp, "Usage: %s [OPTION]... [-T] SOURCE DEST\n", argv0);
fprintf(fp, " or: %s [OPTION]... SOURCE... DIRECTORY\n", argv0); fprintf(fp, " or: %s [OPTION]... SOURCE... DIRECTORY\n", argv0);
@ -444,7 +440,7 @@ void help(FILE* fp, const char* argv0)
#endif #endif
} }
void version(FILE* fp, const char* argv0) static void version(FILE* fp, const char* argv0)
{ {
fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR); fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR);
fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n"); fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n");
@ -462,7 +458,7 @@ int main(int argc, char* argv[])
for ( int i = 1; i < argc; i++ ) for ( int i = 1; i < argc; i++ )
{ {
const char* arg = argv[i]; const char* arg = argv[i];
if ( arg[0] != '-' ) if ( arg[0] != '-' || !arg[1] )
continue; continue;
argv[i] = NULL; argv[i] = NULL;
if ( !strcmp(arg, "--") ) if ( !strcmp(arg, "--") )

View File

@ -36,10 +36,6 @@
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
#if !defined(VERSIONSTR)
#define VERSIONSTR "unknown version"
#endif
const int FLAG_ALL = 1 << 0; const int FLAG_ALL = 1 << 0;
const int FLAG_SUMMARIZE = 1 << 1; const int FLAG_SUMMARIZE = 1 << 1;
const int FLAG_SAME_DEVICE = 1 << 2; const int FLAG_SAME_DEVICE = 1 << 2;
@ -320,12 +316,14 @@ static void version(FILE* fp, const char* argv0)
static void compact_arguments(int* argc, char*** argv) static void compact_arguments(int* argc, char*** argv)
{ {
for ( int i = 0; i < *argc; i++ ) for ( int i = 0; i < *argc; i++ )
{
while ( i < *argc && !(*argv)[i] ) while ( i < *argc && !(*argv)[i] )
{ {
for ( int n = i; n < *argc; n++ ) for ( int n = i; n < *argc; n++ )
(*argv)[n] = (*argv)[n+1]; (*argv)[n] = (*argv)[n+1];
(*argc)--; (*argc)--;
} }
}
} }
static static

View File

@ -88,7 +88,7 @@ int main(int argc, char* argv[])
{ {
const char* arg = argv[i]; const char* arg = argv[i];
if ( arg[0] != '-' ) if ( arg[0] != '-' )
break; break; // Intentionally not continue.
if ( arg[0] == '-' && !arg[1] ) if ( arg[0] == '-' && !arg[1] )
{ {
ignore_environment = true; ignore_environment = true;

View File

@ -27,23 +27,18 @@
#include <errno.h> #include <errno.h>
#include <error.h> #include <error.h>
#if !defined(VERSIONSTR) static void help(FILE* fp, const char* argv0)
#define VERSIONSTR "unknown version"
#endif
void help(const char* argv0)
{ {
printf("usage: %s <REQUEST> ...\n", argv0); fprintf(fp, "Usage: %s [OPTION]... REQUEST...\n", argv0);
printf("Prints a kernel information string.\n"); fprintf(fp, "Prints a kernel information string.\n");
printf("example: %s name\n", argv0); fprintf(fp, "example: %s name\n", argv0);
printf("example: %s version\n", argv0); fprintf(fp, "example: %s version\n", argv0);
printf("example: %s builddate\n", argv0); fprintf(fp, "example: %s builddate\n", argv0);
printf("example: %s buildtime\n", argv0); fprintf(fp, "example: %s buildtime\n", argv0);
} }
void version(const char* argv0) static void version(FILE* fp, const char* argv0)
{ {
FILE* fp = stdout;
fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR); fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR);
fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n"); fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n");
fprintf(fp, "This is free software: you are free to change and redistribute it.\n"); fprintf(fp, "This is free software: you are free to change and redistribute it.\n");
@ -53,14 +48,34 @@ void version(const char* argv0)
int main(int argc, char* argv[]) int main(int argc, char* argv[])
{ {
const char* argv0 = argv[0]; const char* argv0 = argv[0];
if ( argc < 2 ) { help(argv0); return 0; }
for ( int i = 1; i < argc; i++ ) for ( int i = 1; i < argc; i++ )
{ {
if ( argv[i][0] != '-' ) { continue; } const char* arg = argv[i];
if ( strcmp(argv[i], "--help") == 0 ) { help(argv0); return 0; } if ( arg[0] != '-' || !arg[1] )
if ( strcmp(argv[i], "--version") == 0 ) { version(argv0); return 0; } continue;
fprintf(stderr, "%s: unknown option: %s\n", argv0, argv[i]); argv[i] = NULL;
return 1; if ( !strcmp(arg, "--") )
break;
if ( arg[1] != '-' )
{
while ( char c = *++arg ) switch ( c )
{
default:
fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, c);
help(stderr, argv0);
exit(1);
}
}
else if ( !strcmp(arg, "--help") )
help(stdout, argv0), exit(0);
else if ( !strcmp(arg, "--version") )
version(stdout, argv0), exit(0);
else
{
fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
help(stderr, argv0);
exit(1);
}
} }
size_t bufsize = 32; size_t bufsize = 32;
char* buf = (char*) malloc(bufsize); char* buf = (char*) malloc(bufsize);

View File

@ -28,17 +28,26 @@
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
#if !defined(VERSIONSTR) static void compact_arguments(int* argc, char*** argv)
#define VERSIONSTR "unknown version" {
#endif for ( int i = 0; i < *argc; i++ )
{
while ( i < *argc && !(*argv)[i] )
{
for ( int n = i; n < *argc; n++ )
(*argv)[n] = (*argv)[n+1];
(*argc)--;
}
}
}
void Help(FILE* fp, const char* argv0) static void help(FILE* fp, const char* argv0)
{ {
fprintf(fp, "Usage: %s [OPTION]... TARGET LINK_NAME\n", argv0); fprintf(fp, "Usage: %s [OPTION]... TARGET LINK_NAME\n", argv0);
fprintf(fp, "Create a hard or symbolic link.\n"); fprintf(fp, "Create a hard or symbolic link.\n");
} }
void Version(FILE* fp, const char* argv0) static void version(FILE* fp, const char* argv0)
{ {
fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR); fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR);
fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n"); fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n");
@ -55,54 +64,46 @@ int main(int argc, char* argv[])
for ( int i = 1; i < argc; i++ ) for ( int i = 1; i < argc; i++ )
{ {
const char* arg = argv[i]; const char* arg = argv[i];
if ( arg[0] != '-' ) if ( arg[0] != '-' || !arg[1] )
continue; continue;
argv[i] = NULL; argv[i] = NULL;
if ( !strcmp(arg, "--") ) if ( !strcmp(arg, "--") )
break; break;
if ( arg[1] != '-' ) if ( arg[1] != '-' )
for ( size_t i = 1; arg[i]; i++ ) {
switch ( arg[i] ) while ( char c = *++arg ) switch ( c )
{ {
case 'f': force = true; break; case 'f': force = true; break;
case 's': symbolic = true; break; case 's': symbolic = true; break;
case 'v': verbose = true; break; case 'v': verbose = true; break;
default: default:
fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, arg[i]); fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, arg[i]);
Help(stderr, argv0); help(stderr, argv0);
exit(1); exit(1);
} }
}
else if ( !strcmp(arg, "--force") ) else if ( !strcmp(arg, "--force") )
force = true; force = true;
else if ( !strcmp(arg, "--symbolic") ) else if ( !strcmp(arg, "--symbolic") )
symbolic = true; symbolic = true;
else if ( !strcmp(arg, "--verbose") ) else if ( !strcmp(arg, "--verbose") )
verbose = true; verbose = true;
else if ( !strcmp(arg, "--help") ) { Help(stdout, argv0); exit(0); } else if ( !strcmp(arg, "--help") )
else if ( !strcmp(arg, "--version") ) { Version(stdout, argv0); exit(0); } help(stdout, argv0), exit(0);
else if ( !strcmp(arg, "--version") )
version(stdout, argv0), exit(0);
else else
{ {
fprintf(stderr, "%s: unknown option: %s\n", argv0, arg); fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
Help(stderr, argv0); help(stderr, argv0);
exit(1); exit(1);
} }
} }
for ( int i = 0; i < argc; i++ ) compact_arguments(&argc, &argv);
while ( i < argc && !argv[i] )
{
for ( int n = i; n < argc; n++ )
argv[n] = argv[n+1];
argc--;
}
if ( argc != 3 ) if ( argc != 3 )
{ error(1, 0, "%s operand", argc < 3 ? "missing" : "extra");
const char* what = argc < 3 ? "missing" : "extra";
fprintf(stderr, "%s: %s operand\n", argv0, what);
Help(stderr, argv0);
exit(1);
}
const char* oldname = argv[1]; const char* oldname = argv[1];
const char* newname = argv[2]; const char* newname = argv[2];

View File

@ -40,10 +40,6 @@
#include <time.h> #include <time.h>
#include <unistd.h> #include <unistd.h>
#if !defined(VERSIONSTR)
#define VERSIONSTR "unknown version"
#endif
int current_year; int current_year;
bool option_colors = false; bool option_colors = false;

View File

@ -30,10 +30,6 @@
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#if !defined(VERSIONSTR)
#define VERSIONSTR "unknown version"
#endif
void CreateDirectory(const char* path, bool parents, bool verbose) void CreateDirectory(const char* path, bool parents, bool verbose)
{ {
if ( mkdir(path, 0777) < 0 ) if ( mkdir(path, 0777) < 0 )
@ -66,13 +62,26 @@ void CreateDirectory(const char* path, bool parents, bool verbose)
fprintf(stderr, "%s: created directory `%s'\n", program_invocation_name, path); fprintf(stderr, "%s: created directory `%s'\n", program_invocation_name, path);
} }
void Help(FILE* fp, const char* argv0) static void compact_arguments(int* argc, char*** argv)
{
for ( int i = 0; i < *argc; i++ )
{
while ( i < *argc && !(*argv)[i] )
{
for ( int n = i; n < *argc; n++ )
(*argv)[n] = (*argv)[n+1];
(*argc)--;
}
}
}
static void help(FILE* fp, const char* argv0)
{ {
fprintf(fp, "Usage: %s [OPTION]... DIRECTORY...\n", argv0); fprintf(fp, "Usage: %s [OPTION]... DIRECTORY...\n", argv0);
fprintf(fp, "Create directories if they don't already exist.\n"); fprintf(fp, "Create directories if they don't already exist.\n");
} }
void Version(FILE* fp, const char* argv0) static void version(FILE* fp, const char* argv0)
{ {
fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR); fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR);
fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n"); fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n");
@ -88,46 +97,43 @@ int main(int argc, char* argv[])
for ( int i = 1; i < argc; i++ ) for ( int i = 1; i < argc; i++ )
{ {
const char* arg = argv[i]; const char* arg = argv[i];
if ( arg[0] != '-' ) if ( arg[0] != '-' || !arg[1] )
continue; continue;
argv[i] = NULL; argv[i] = NULL;
if ( !strcmp(arg, "--") ) if ( !strcmp(arg, "--") )
break; break;
if ( arg[1] != '-' ) if ( arg[1] != '-' )
for ( size_t i = 1; arg[i]; i++ ) {
switch ( arg[i] ) while ( char c = *++arg ) switch ( c )
{ {
case 'p': parents = true; break; case 'p': parents = true; break;
case 'v': verbose = true; break; case 'v': verbose = true; break;
default: default:
fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, arg[i]); fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, arg[i]);
Help(stderr, argv0); help(stderr, argv0);
exit(1); exit(1);
} }
}
else if ( !strcmp(arg, "--parents") ) else if ( !strcmp(arg, "--parents") )
parents = true; parents = true;
else if ( !strcmp(arg, "--verbose") ) else if ( !strcmp(arg, "--verbose") )
verbose = true; verbose = true;
else if ( !strcmp(arg, "--help") ) { Help(stdout, argv0); exit(0); } else if ( !strcmp(arg, "--help") )
else if ( !strcmp(arg, "--version") ) { Version(stdout, argv0); exit(0); } help(stdout, argv0), exit(0);
else if ( !strcmp(arg, "--version") )
version(stdout, argv0), exit(0);
else else
{ {
fprintf(stderr, "%s: unknown option: %s\n", argv0, arg); fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
Help(stderr, argv0); help(stderr, argv0);
exit(1); exit(1);
} }
} }
int num_args = 0; compact_arguments(&argc, &argv);
for ( int i = 1; i < argc; i++ )
if ( argv[i] )
num_args++;
if ( !num_args ) if ( argc < 2 )
{ error(1, 0, "missing operand");
fprintf(stderr, "%s: missing operand\n", argv0);
exit(1);
}
for ( int i = 1; i < argc; i++ ) for ( int i = 1; i < argc; i++ )
{ {

View File

@ -102,7 +102,7 @@ int main(int argc, char* argv[])
for ( int i = 1; i < argc; i++ ) for ( int i = 1; i < argc; i++ )
{ {
const char* arg = argv[i]; const char* arg = argv[i];
if ( arg[0] != '-' ) if ( arg[0] != '-' || !arg[1] )
continue; continue;
argv[i] = NULL; argv[i] = NULL;
if ( !strcmp(arg, "--") ) if ( !strcmp(arg, "--") )

View File

@ -36,10 +36,6 @@
#include <unistd.h> #include <unistd.h>
#include <wchar.h> #include <wchar.h>
#if !defined(VERSIONSTR)
#define VERSIONSTR "unknown version"
#endif
struct display_entry struct display_entry
{ {
wchar_t c; wchar_t c;
@ -323,7 +319,7 @@ void pager_push_path(struct pager* pager, const char* path)
close(fd); close(fd);
} }
void compact_arguments(int* argc, char*** argv) static void compact_arguments(int* argc, char*** argv)
{ {
for ( int i = 0; i < *argc; i++ ) for ( int i = 0; i < *argc; i++ )
{ {
@ -336,13 +332,13 @@ void compact_arguments(int* argc, char*** argv)
} }
} }
void help(FILE* fp, const char* argv0) static void help(FILE* fp, const char* argv0)
{ {
fprintf(fp, "Usage: %s [OPTION]... [FILES]...\n", argv0); fprintf(fp, "Usage: %s [OPTION]... [FILES]...\n", argv0);
fprintf(fp, "Displays files one page at a time.\n"); fprintf(fp, "Displays files one page at a time.\n");
} }
void version(FILE* fp, const char* argv0) static void version(FILE* fp, const char* argv0)
{ {
fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR); fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR);
fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n"); fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n");
@ -358,7 +354,7 @@ int main(int argc, char* argv[])
for ( int i = 1; i < argc; i++ ) for ( int i = 1; i < argc; i++ )
{ {
const char* arg = argv[i]; const char* arg = argv[i];
if ( arg[0] != '-' ) if ( arg[0] != '-' || !arg[1] )
continue; continue;
argv[i] = NULL; argv[i] = NULL;
if ( !strcmp(arg, "--") ) if ( !strcmp(arg, "--") )

View File

@ -27,10 +27,6 @@
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
#if !defined(VERSIONSTR)
#define VERSIONSTR "unknown version"
#endif
static bool nul_or_slash(char c) static bool nul_or_slash(char c)
{ {
return !c || c == '/'; return !c || c == '/';

View File

@ -32,10 +32,6 @@
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
#if !defined(VERSIONSTR)
#define VERSIONSTR "unknown version"
#endif
// TODO: Wrong implementation of -f! It means ignore *nonexistent files*, not // TODO: Wrong implementation of -f! It means ignore *nonexistent files*, not
// ignore all errors! // ignore all errors!
@ -124,13 +120,26 @@ bool RemoveRecursively(int dirfd, const char* full, const char* rel,
return ret; return ret;
} }
void Help(FILE* fp, const char* argv0) static void compact_arguments(int* argc, char*** argv)
{
for ( int i = 0; i < *argc; i++ )
{
while ( i < *argc && !(*argv)[i] )
{
for ( int n = i; n < *argc; n++ )
(*argv)[n] = (*argv)[n+1];
(*argc)--;
}
}
}
static void help(FILE* fp, const char* argv0)
{ {
fprintf(fp, "Usage: %s [OPTION]... FILE...\n", argv0); fprintf(fp, "Usage: %s [OPTION]... FILE...\n", argv0);
fprintf(fp, "Remove files by unlinking their directory entries.\n"); fprintf(fp, "Remove files by unlinking their directory entries.\n");
} }
void Version(FILE* fp, const char* argv0) static void version(FILE* fp, const char* argv0)
{ {
fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR); fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR);
fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n"); fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n");
@ -147,57 +156,52 @@ int main(int argc, char* argv[])
for ( int i = 1; i < argc; i++ ) for ( int i = 1; i < argc; i++ )
{ {
const char* arg = argv[i]; const char* arg = argv[i];
if ( arg[0] != '-' ) if ( arg[0] != '-' || !arg[1] )
continue; continue;
argv[i] = NULL; argv[i] = NULL;
if ( !strcmp(arg, "--") ) if ( !strcmp(arg, "--") )
break; break;
if ( arg[1] != '-' ) if ( arg[1] != '-' )
for ( size_t i = 1; arg[i]; i++ ) {
switch ( arg[i] ) while ( char c = *++arg ) switch ( c )
{ {
case 'f': force = true; break; case 'f': force = true; break;
case 'r': recursive = true; break; case 'r': recursive = true; break;
case 'R': recursive = true; break; case 'R': recursive = true; break;
case 'v': verbose = true; break; case 'v': verbose = true; break;
default: default:
fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, arg[i]); fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, arg[i]);
Help(stderr, argv0); help(stderr, argv0);
exit(1); exit(1);
} }
}
else if ( !strcmp(arg, "--force") ) else if ( !strcmp(arg, "--force") )
force = true; force = true;
else if ( !strcmp(arg, "--recursive") ) else if ( !strcmp(arg, "--recursive") )
recursive = true; recursive = true;
else if ( !strcmp(arg, "--verbose") ) else if ( !strcmp(arg, "--verbose") )
verbose = true; verbose = true;
else if ( !strcmp(arg, "--help") ) { Help(stdout, argv0); exit(0); } else if ( !strcmp(arg, "--help") )
else if ( !strcmp(arg, "--version") ) { Version(stdout, argv0); exit(0); } help(stdout, argv0), exit(0);
else if ( !strcmp(arg, "--version") )
version(stdout, argv0), exit(0);
else else
{ {
fprintf(stderr, "%s: unknown option: %s\n", argv0, arg); fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
Help(stderr, argv0); help(stderr, argv0);
exit(1); exit(1);
} }
} }
int num_args = 0; compact_arguments(&argc, &argv);
for ( int i = 1; i < argc; i++ )
if ( argv[i] )
num_args++;
if ( !num_args && !force ) if ( argc < 2 && !force )
{ error(1, 0, "missing operand");
fprintf(stderr, "%s: missing operand\n", argv0);
exit(1);
}
int main_ret = 0; int main_ret = 0;
for ( int i = 1; i < argc; i++ ) for ( int i = 1; i < argc; i++ )
{ {
const char* arg = argv[i]; const char* arg = argv[i];
if ( !arg )
continue;
if ( unlink(arg) < 0 ) if ( unlink(arg) < 0 )
{ {
if ( !recursive || errno != EISDIR ) if ( !recursive || errno != EISDIR )

View File

@ -30,17 +30,26 @@
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
#if !defined(VERSIONSTR) static void compact_arguments(int* argc, char*** argv)
#define VERSIONSTR "unknown version" {
#endif for ( int i = 0; i < *argc; i++ )
{
while ( i < *argc && !(*argv)[i] )
{
for ( int n = i; n < *argc; n++ )
(*argv)[n] = (*argv)[n+1];
(*argc)--;
}
}
}
void Help(FILE* fp, const char* argv0) static void help(FILE* fp, const char* argv0)
{ {
fprintf(fp, "Usage: %s [OPTION]... DIRECTORY...\n", argv0); fprintf(fp, "Usage: %s [OPTION]... DIRECTORY...\n", argv0);
fprintf(fp, "Remove directories if they are empty.\n"); fprintf(fp, "Remove directories if they are empty.\n");
} }
void Version(FILE* fp, const char* argv0) static void version(FILE* fp, const char* argv0)
{ {
fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR); fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR);
fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n"); fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n");
@ -57,54 +66,49 @@ int main(int argc, char* argv[])
for ( int i = 1; i < argc; i++ ) for ( int i = 1; i < argc; i++ )
{ {
const char* arg = argv[i]; const char* arg = argv[i];
if ( arg[0] != '-' ) if ( arg[0] != '-' || !arg[1] )
continue; continue;
argv[i] = NULL; argv[i] = NULL;
if ( !strcmp(arg, "--") ) if ( !strcmp(arg, "--") )
break; break;
if ( arg[1] != '-' ) if ( arg[1] != '-' )
for ( size_t i = 1; arg[i]; i++ ) {
switch ( arg[i] ) while ( char c = *++arg ) switch ( c )
{ {
case 'p': parents = true; break; case 'p': parents = true; break;
case 'v': verbose = true; break; case 'v': verbose = true; break;
default: default:
fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, arg[i]); fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, arg[i]);
Help(stderr, argv0); help(stderr, argv0);
exit(1); exit(1);
} }
}
else if ( !strcmp(arg, "--ignore-fail-on-non-empty") ) else if ( !strcmp(arg, "--ignore-fail-on-non-empty") )
ignore_non_empty = true; ignore_non_empty = true;
else if ( !strcmp(arg, "--parents") ) else if ( !strcmp(arg, "--parents") )
parents = true; parents = true;
else if ( !strcmp(arg, "--verbose") ) else if ( !strcmp(arg, "--verbose") )
verbose = true; verbose = true;
else if ( !strcmp(arg, "--help") ) { Help(stdout, argv0); exit(0); } else if ( !strcmp(arg, "--help") )
else if ( !strcmp(arg, "--version") ) { Version(stdout, argv0); exit(0); } help(stdout, argv0), exit(0);
else if ( !strcmp(arg, "--version") )
version(stdout, argv0), exit(0);
else else
{ {
fprintf(stderr, "%s: unknown option: %s\n", argv0, arg); fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
Help(stderr, argv0); help(stderr, argv0);
exit(1); exit(1);
} }
} }
int num_args = 0; compact_arguments(&argc, &argv);
for ( int i = 1; i < argc; i++ )
if ( argv[i] )
num_args++;
if ( !num_args ) if ( argc < 2 )
{ error(1, 0, "missing operand");
fprintf(stderr, "%s: missing operand\n", argv0);
exit(1);
}
for ( int i = 1; i < argc; i++ ) for ( int i = 1; i < argc; i++ )
{ {
const char* arg = argv[i]; const char* arg = argv[i];
if ( !arg )
continue;
// TODO: Support --parents option. // TODO: Support --parents option.
(void) parents; (void) parents;
int ret = rmdir(arg); int ret = rmdir(arg);

View File

@ -29,10 +29,6 @@
#include <error.h> #include <error.h>
#include <ctype.h> #include <ctype.h>
#if !defined(VERSIONSTR)
#define VERSIONSTR "unknown version"
#endif
#ifdef HEAD #ifdef HEAD
#define TAIL false #define TAIL false
#else #else
@ -119,20 +115,26 @@ bool processfp(const char* inputname, FILE* fp)
return true; return true;
} }
void help(const char* argv0) static void compact_arguments(int* argc, char*** argv)
{ {
printf("usage: %s [-n <numlines>] [-q | -v] [<FILE> ...]\n", argv0); for ( int i = 0; i < *argc; i++ )
{
while ( i < *argc && !(*argv)[i] )
{
for ( int n = i; n < *argc; n++ )
(*argv)[n] = (*argv)[n+1];
(*argc)--;
}
}
} }
void errusage(const char* argv0) static void help(FILE* fp, const char* argv0)
{ {
help(argv0); fprintf(fp, "Usage: %s [OPTION]... [FILE]...\n", argv0);
exit(1);
} }
void version(const char* argv0) static void version(FILE* fp, const char* argv0)
{ {
FILE* fp = stdout;
fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR); fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR);
fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n"); fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n");
fprintf(fp, "This is free software: you are free to change and redistribute it.\n"); fprintf(fp, "This is free software: you are free to change and redistribute it.\n");
@ -141,54 +143,73 @@ void version(const char* argv0)
int main(int argc, char* argv[]) int main(int argc, char* argv[])
{ {
const char* argv0 = argv[0]; const char* nlinesstr = NULL;
const char* argv0 = argv[0];
for ( int i = 1; i < argc; i++ ) for ( int i = 1; i < argc; i++ )
{ {
const char* arg = argv[i]; const char* arg = argv[i];
if ( arg[0] != '-' ) { continue; } if ( arg[0] != '-' || !arg[1] )
continue;
argv[i] = NULL; argv[i] = NULL;
if ( strcmp(arg, "--") == 0 ) { break; } if ( !strcmp(arg, "--") )
const char* nlinesstr = NULL; break;
if ( strcmp(arg, "--help") == 0 ) { help(argv0); return 0; } if ( isdigit((unsigned char) arg[1]) )
if ( strcmp(arg, "--version") == 0 ) { version(argv0); return 0; } nlinesstr = arg + 1;
if ( strcmp(arg, "-q") == 0 || else if ( arg[1] != '-' )
strcmp(arg, "--quiet") == 0 ||
strcmp(arg, "--silent") == 0 )
{ {
quiet = true; while ( char c = *++arg ) switch ( c )
verbose = false;
continue;
}
if ( strcmp(arg, "-v") == 0 ||
strcmp(arg, "--verbose") == 0 )
{
quiet = false;
verbose = true;
continue;
}
if ( strcmp(arg, "-n") == 0 ) { nlinesstr = argv[++i]; argv[i] = NULL; }
if ( isdigit(arg[1]) ) { nlinesstr = arg+1; }
if ( nlinesstr )
{
char* nlinesstrend;
long nlines = strtol(nlinesstr, &nlinesstrend, 10);
if ( *nlinesstrend )
{ {
fprintf(stderr, "Bad number of lines: %s\n", nlinesstr); case 'n':
errusage(argv0); if ( !*(nlinesstr = arg + 1) )
{
if ( i + 1 == argc )
{
error(0, 0, "option requires an argument -- 'n'");
fprintf(stderr, "Try `%s --help' for more information.\n", argv[0]);
exit(125);
}
nlinesstr = argv[i+1];
argv[++i] = NULL;
}
arg = "n";
break;
case 'q': quiet = true; verbose = false; break;
case 'v': quiet = false; verbose = true; break;
default:
fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, c);
help(stderr, argv0);
exit(1);
} }
numlines = nlines;
continue;
} }
fprintf(stderr, "%s: unrecognized option '%s'\n", argv0, arg); else if ( !strcmp(arg, "--help") )
errusage(argv0); help(stdout, argv0), exit(0);
else if ( !strcmp(arg, "--version") )
version(stdout, argv0), exit(0);
else if ( !strcmp(arg, "--quiet") || !strcmp(arg, "--silent") )
quiet = true, verbose = false;
else if ( !strcmp(arg, "--verbose") )
quiet = false, verbose = true;
else
{
fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
help(stderr, argv0);
exit(1);
}
} }
size_t numfiles = 0; compact_arguments(&argc, &argv);
for ( int i = 1; i < argc; i++ ) { if ( argv[i] ) { numfiles++; } }
if ( !numfiles ) if ( nlinesstr )
{
char* nlinesstrend;
long nlines = strtol(nlinesstr, &nlinesstrend, 10);
if ( *nlinesstrend )
error(1, 0, "Bad number of lines: %s", nlinesstr);
numlines = nlines;
}
if ( argc < 2 )
{ {
bool header = verbose; bool header = verbose;
if ( header ) if ( header )
@ -203,7 +224,6 @@ int main(int argc, char* argv[])
const char* prefix = ""; const char* prefix = "";
for ( int i = 1; i < argc; i++ ) for ( int i = 1; i < argc; i++ )
{ {
if ( !argv[i] ) { continue; }
bool isstdin = strcmp(argv[i], "-") == 0; bool isstdin = strcmp(argv[i], "-") == 0;
FILE* fp = isstdin ? stdin : fopen(argv[i], "r"); FILE* fp = isstdin ? stdin : fopen(argv[i], "r");
if ( !fp ) if ( !fp )
@ -212,7 +232,7 @@ int main(int argc, char* argv[])
result = 1; result = 1;
continue; continue;
} }
bool header = !quiet && (verbose || 1 < numfiles); bool header = !quiet && (verbose || 2 < argc);
if ( header ) if ( header )
printf("%s==> %s <==\n", prefix, argv[i]); printf("%s==> %s <==\n", prefix, argv[i]);
prefix = "\n"; prefix = "\n";

View File

@ -29,17 +29,13 @@
#include <errno.h> #include <errno.h>
#include <error.h> #include <error.h>
#if !defined(VERSIONSTR) static void help(FILE* fp, const char* argv0)
#define VERSIONSTR "unknown version"
#endif
void help(FILE* fp, const char* argv0)
{ {
fprintf(fp, "usage: %s [--help | --version]\n", argv0); fprintf(fp, "Usage: %s [OPTION]...\n", argv0);
fprintf(fp, "Lets you type freely onto the tty.\n"); fprintf(fp, "Lets you type freely onto the tty.\n");
} }
void version(FILE* fp, const char* argv0) static void version(FILE* fp, const char* argv0)
{ {
fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR); fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR);
fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n"); fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n");
@ -54,14 +50,31 @@ int main(int argc, char* argv[])
for ( int i = 1; i < argc; i++ ) for ( int i = 1; i < argc; i++ )
{ {
const char* arg = argv[i]; const char* arg = argv[i];
if ( arg[0] != '-' ) { continue; } if ( arg[0] != '-' || !arg[1] )
continue;
argv[i] = NULL; argv[i] = NULL;
if ( !strcmp(arg, "--") ) { break; } if ( !strcmp(arg, "--") )
if ( !strcmp(arg, "--help") ) { help(stdout, argv0); exit(0); } break;
if ( !strcmp(arg, "--version") ) { version(stdout, argv0); exit(0); } if ( arg[1] != '-' )
error(0, 0, "unrecognized option: %s", arg); {
help(stderr, argv0); while ( char c = *++arg ) switch ( c )
exit(1); {
default:
fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, c);
help(stderr, argv0);
exit(1);
}
}
else if ( !strcmp(arg, "--help") )
help(stdout, argv0), exit(0);
else if ( !strcmp(arg, "--version") )
version(stdout, argv0), exit(0);
else
{
fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
help(stderr, argv0);
exit(1);
}
} }
if ( !isatty(0) || !isatty(1) ) if ( !isatty(0) || !isatty(1) )

View File

@ -30,18 +30,14 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#if !defined(VERSIONSTR) static const int PRINT_KERNELNAME = 1 << 0;
#define VERSIONSTR "unknown version" static const int PRINT_NODENAME = 1 << 1;
#endif static const int PRINT_KERNELREL = 1 << 2;
static const int PRINT_KERNELVER = 1 << 3;
const unsigned long PRINT_KERNELNAME = 1UL << 0UL; static const int PRINT_MACHINE = 1 << 5;
const unsigned long PRINT_NODENAME = 1UL << 1UL; static const int PRINT_PROCESSOR = 1 << 6;
const unsigned long PRINT_KERNELREL = 1UL << 2UL; static const int PRINT_HWPLATFORM = 1 << 7;
const unsigned long PRINT_KERNELVER = 1UL << 3UL; static const int PRINT_OPSYS = 1 << 8;
const unsigned long PRINT_MACHINE = 1UL << 4UL;
const unsigned long PRINT_PROCESSOR = 1UL << 5UL;
const unsigned long PRINT_HWPLATFORM = 1UL << 6UL;
const unsigned long PRINT_OPSYS = 1UL << 7UL;
bool has_printed = false; bool has_printed = false;
@ -53,13 +49,26 @@ void DoPrint(const char* msg)
has_printed = true; has_printed = true;
} }
void Help(FILE* fp, const char* argv0) static void compact_arguments(int* argc, char*** argv)
{
for ( int i = 0; i < *argc; i++ )
{
while ( i < *argc && !(*argv)[i] )
{
for ( int n = i; n < *argc; n++ )
(*argv)[n] = (*argv)[n+1];
(*argc)--;
}
}
}
static void help(FILE* fp, const char* argv0)
{ {
fprintf(fp, "Usage: %s [OPTION]...\n", argv0); fprintf(fp, "Usage: %s [OPTION]...\n", argv0);
fprintf(fp, "Print certain system information.\n"); fprintf(fp, "Print certain system information.\n");
} }
void Version(FILE* fp, const char* argv0) static void version(FILE* fp, const char* argv0)
{ {
fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR); fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR);
fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n"); fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n");
@ -70,34 +79,34 @@ void Version(FILE* fp, const char* argv0)
int main(int argc, char* argv[]) int main(int argc, char* argv[])
{ {
const char* argv0 = argv[0]; const char* argv0 = argv[0];
unsigned long flags = 0; int flags = 0;
for ( int i = 1; i < argc; i++ ) for ( int i = 1; i < argc; i++ )
{ {
const char* arg = argv[i]; const char* arg = argv[i];
if ( arg[0] != '-' ) if ( arg[0] != '-' || !arg[1] )
{ continue;
fprintf(stderr, "%s: extra operand: %s\n", argv0, arg); argv[i] = NULL;
Help(stderr, argv0); if ( !strcmp(arg, "--") )
exit(1); break;
}
if ( arg[1] != '-' ) if ( arg[1] != '-' )
for ( size_t i = 1; arg[i]; i++ ) {
switch ( arg[i] ) while ( char c = *++arg ) switch ( c )
{ {
case 'a': flags |= LONG_MAX; break; case 'a': flags |= LONG_MAX; break;
case 's': flags |= PRINT_KERNELNAME; break; case 's': flags |= PRINT_KERNELNAME; break;
case 'n': flags |= PRINT_NODENAME; break; case 'n': flags |= PRINT_NODENAME; break;
case 'r': flags |= PRINT_KERNELREL; break; case 'r': flags |= PRINT_KERNELREL; break;
case 'v': flags |= PRINT_KERNELVER; break; case 'v': flags |= PRINT_KERNELVER; break;
case 'm': flags |= PRINT_MACHINE; break; case 'm': flags |= PRINT_MACHINE; break;
case 'p': flags |= PRINT_PROCESSOR; break; case 'p': flags |= PRINT_PROCESSOR; break;
case 'i': flags |= PRINT_HWPLATFORM; break; case 'i': flags |= PRINT_HWPLATFORM; break;
case 'o': flags |= PRINT_OPSYS; break; case 'o': flags |= PRINT_OPSYS; break;
default: default:
fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, arg[i]); fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, arg[i]);
Help(stderr, argv0); help(stderr, argv0);
exit(1); exit(1);
} }
}
else if ( !strcmp(arg, "--kernel-name") ) else if ( !strcmp(arg, "--kernel-name") )
flags |= PRINT_KERNELNAME; flags |= PRINT_KERNELNAME;
else if ( !strcmp(arg, "--nodename") ) else if ( !strcmp(arg, "--nodename") )
@ -114,16 +123,23 @@ int main(int argc, char* argv[])
flags |= PRINT_HWPLATFORM; flags |= PRINT_HWPLATFORM;
else if ( !strcmp(arg, "--operating-system") ) else if ( !strcmp(arg, "--operating-system") )
flags |= PRINT_OPSYS; flags |= PRINT_OPSYS;
else if ( !strcmp(arg, "--help") ) { Help(stdout, argv0); exit(0); } else if ( !strcmp(arg, "--help") )
else if ( !strcmp(arg, "--version") ) { Version(stdout, argv0); exit(0); } help(stdout, argv0), exit(0);
else if ( !strcmp(arg, "--version") )
version(stdout, argv0), exit(0);
else else
{ {
fprintf(stderr, "%s: unknown option: %s\n", argv0, arg); fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
Help(stderr, argv0); help(stderr, argv0);
exit(1); exit(1);
} }
} }
compact_arguments(&argc, &argv);
if ( 1 < argc )
error(1, 0, "extra operand");
static struct utsname utsname; static struct utsname utsname;
if ( uname(&utsname) < 0 ) if ( uname(&utsname) < 0 )
error(1, errno, "uname"); error(1, errno, "uname");

View File

@ -35,10 +35,6 @@
#include <wchar.h> #include <wchar.h>
#include <wctype.h> #include <wctype.h>
#if !defined(VERSIONSTR)
#define VERSIONSTR "unknown version"
#endif
const int FLAG_PRINT_NUM_BYTES = 1 << 0; const int FLAG_PRINT_NUM_BYTES = 1 << 0;
const int FLAG_PRINT_NUM_CHARACTERS = 1 << 1; const int FLAG_PRINT_NUM_CHARACTERS = 1 << 1;
const int FLAG_PRINT_NUM_WORDS = 1 << 2; const int FLAG_PRINT_NUM_WORDS = 1 << 2;
@ -162,12 +158,14 @@ static void version(FILE* fp, const char* argv0)
static void compact_arguments(int* argc, char*** argv) static void compact_arguments(int* argc, char*** argv)
{ {
for ( int i = 0; i < *argc; i++ ) for ( int i = 0; i < *argc; i++ )
{
while ( i < *argc && !(*argv)[i] ) while ( i < *argc && !(*argv)[i] )
{ {
for ( int n = i; n < *argc; n++ ) for ( int n = i; n < *argc; n++ )
(*argv)[n] = (*argv)[n+1]; (*argv)[n] = (*argv)[n+1];
(*argc)--; (*argc)--;
} }
}
} }
bool word_count_file(FILE* fp, const char* path, int flags, bool word_count_file(FILE* fp, const char* path, int flags,

View File

@ -31,10 +31,6 @@
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
#if !defined(VERSIONSTR)
#define VERSIONSTR "unknown version"
#endif
// NOTE: The PATH-searching logic is repeated multiple places. Until this logic // NOTE: The PATH-searching logic is repeated multiple places. Until this logic
// can be shared somehow, you need to keep this comment in sync as well // can be shared somehow, you need to keep this comment in sync as well
// as the logic in these files: // as the logic in these files:
@ -123,13 +119,26 @@ bool Which(const char* filename, const char* path, bool all)
return found; return found;
} }
void Help(FILE* fp, const char* argv0) static void compact_arguments(int* argc, char*** argv)
{
for ( int i = 0; i < *argc; i++ )
{
while ( i < *argc && !(*argv)[i] )
{
for ( int n = i; n < *argc; n++ )
(*argv)[n] = (*argv)[n+1];
(*argc)--;
}
}
}
static void help(FILE* fp, const char* argv0)
{ {
fprintf(fp, "Usage: %s [-a] FILENAME...\n", argv0); fprintf(fp, "Usage: %s [-a] FILENAME...\n", argv0);
fprintf(fp, "Locate a program in the PATH.\n"); fprintf(fp, "Locate a program in the PATH.\n");
} }
void Version(FILE* fp, const char* argv0) static void version(FILE* fp, const char* argv0)
{ {
fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR); fprintf(fp, "%s (Sortix) %s\n", argv0, VERSIONSTR);
fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n"); fprintf(fp, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n");
@ -144,41 +153,38 @@ int main(int argc, char* argv[])
for ( int i = 1; i < argc; i++ ) for ( int i = 1; i < argc; i++ )
{ {
const char* arg = argv[i]; const char* arg = argv[i];
if ( arg[0] != '-' ) if ( arg[0] != '-' || !arg[1] )
continue; continue;
argv[i] = NULL; argv[i] = NULL;
if ( !strcmp(arg, "--") ) if ( !strcmp(arg, "--") )
break; break;
if ( arg[1] != '-' ) if ( arg[1] != '-' )
for ( size_t i = 1; arg[i]; i++ ) {
switch ( arg[i] ) while ( char c = *++arg ) switch ( c )
{ {
case 'a': all = true; break; case 'a': all = true; break;
default: default:
fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, arg[i]); fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, arg[i]);
Help(stderr, argv0); help(stderr, argv0);
exit(1); exit(1);
} }
else if ( !strcmp(arg, "--help") ) { Help(stdout, argv0); exit(0); } }
else if ( !strcmp(arg, "--version") ) { Version(stdout, argv0); exit(0); } else if ( !strcmp(arg, "--help") )
help(stdout, argv0), exit(0);
else if ( !strcmp(arg, "--version") )
version(stdout, argv0), exit(0);
else else
{ {
fprintf(stderr, "%s: unknown option: %s\n", argv0, arg); fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
Help(stderr, argv0); help(stderr, argv0);
exit(1); exit(1);
} }
} }
int num_args = 0; compact_arguments(&argc, &argv);
for ( int i = 1; i < argc; i++ )
if ( argv[i] )
num_args++;
if ( !num_args ) if ( argc < 2 )
{ error(1, 0, "missing operand");
fprintf(stderr, "%s: missing operand\n", argv0);
exit(1);
}
const char* path = getenv("PATH"); const char* path = getenv("PATH");
@ -186,8 +192,6 @@ int main(int argc, char* argv[])
for ( int i = 1; i < argc; i++ ) for ( int i = 1; i < argc; i++ )
{ {
const char* arg = argv[i]; const char* arg = argv[i];
if ( !arg )
continue;
if ( !Which(arg, path, all) ) if ( !Which(arg, path, all) )
success = false; success = false;
} }