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 <string.h>
#if !defined(VERSIONSTR)
#define VERSIONSTR "unknown version"
#endif
static void compact_arguments(int* argc, char*** argv)
{
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;
}
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");
}
void Help(FILE* fp, const char* argv0)
static void version(FILE* fp, const char* argv0)
{
Usage(fp, argv0);
}
void Version(FILE* fp, const char* argv0)
{
(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");
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[])
@ -264,50 +270,51 @@ int main(int argc, char* argv[])
bool all = false;
bool check = false;
const char* argv0 = argv[0];
if ( argc < 2 ) { Usage(stdout, argv0); exit(0); }
for ( int i = 1; i < argc; i++ )
{
const char* arg = argv[i];
if ( arg[0] != '-' ) { continue; }
if ( arg[0] != '-' || !arg[1] )
continue;
argv[i] = NULL;
if ( !strcmp(arg, "--") ) { break; }
if ( !strcmp(arg, "--help") ) { Help(stdout, argv0); exit(0); }
if ( !strcmp(arg, "--usage") ) { Usage(stdout, argv0); exit(0); }
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 )
if ( !strcmp(arg, "--") )
break;
if ( arg[1] != '-' )
{
case 1: initrd = argv[i]; break;
case 2: cmd = argv[i]; break;
case 3: path = argv[i]; break;
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 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;
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"; }
compact_arguments(&argc, &argv);
if ( errmsg )
{
fprintf(stderr, "%s: %s\n", argv0, errmsg),
Usage(stderr, argv0);
exit(1);
}
if ( argc == 1 )
error(1, 0, "No initrd specified");
const char* initrd = argv[1];
if ( argc == 2 )
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);
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
OPTLEVEL?=$(DEFAULT_OPTLEVEL)
CPPFLAGS?=
CXXFLAGS?=$(OPTLEVEL)
CPPFLAGS:=$(CPPFLAGS)
CPPFLAGS:=$(CPPFLAGS) -DVERSIONSTR=\"$(VERSION)\"
CXXFLAGS:=$(CXXFLAGS) -Wall -Wextra -fno-exceptions -fno-rtti
BINARIES:=\

View File

@ -55,17 +55,19 @@ int redirect(const char* path, int flags, mode_t mode = 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, "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[])
{
char* cp = strdup(getenv_def("CP", "cp"));
@ -82,7 +84,7 @@ int main(int argc, char* argv[])
for ( int i = 0; i < argc; i++ )
{
const char* arg = argv[i];
if ( arg[0] != '-' )
if ( arg[0] != '-' || !arg[1] )
continue;
argv[i] = NULL;
if ( !strcmp(arg, "--") )
@ -92,13 +94,15 @@ int main(int argc, char* argv[])
while ( char c = *++arg ) switch ( c )
{
default:
fprintf(stderr, "%s: unknown option -- `%c'\n", argv0, c);
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, "--help") )
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("--diff", &diff) ) { }
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
{
fprintf(stderr, "%s: unknown option: `%s'\n", argv0, arg);
fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
help(stderr, argv0);
exit(1);
}
@ -122,7 +126,7 @@ int main(int argc, char* argv[])
exit(0);
}
CompactArguments(&argc, &argv);
compact_arguments(&argc, &argv);
if ( argc <= 1 )
{

View File

@ -45,15 +45,18 @@
#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, "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)
@ -75,7 +78,7 @@ int main(int argc, char* argv[])
for ( int i = 0; i < argc; i++ )
{
const char* arg = argv[i];
if ( arg[0] != '-' )
if ( arg[0] != '-' || !arg[1] )
continue;
argv[i] = NULL;
if ( !strcmp(arg, "--") )
@ -85,13 +88,15 @@ int main(int argc, char* argv[])
while ( char c = *++arg ) switch ( c )
{
default:
fprintf(stderr, "%s: unknown option -- `%c'\n", argv0, c);
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, "--help") )
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", &output) ) { }
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
{
fprintf(stderr, "%s: unknown option: `%s'\n", argv0, arg);
fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
help(stderr, argv0);
exit(1);
}
@ -113,21 +118,13 @@ int main(int argc, char* argv[])
exit(0);
}
CompactArguments(&argc, &argv);
compact_arguments(&argc, &argv);
if ( argc <= 1 )
{
fprintf(stderr, "%s: no archived port tix specified\n", argv0);
help(stderr, argv0);
exit(1);
}
error(1, 0, "No archived port tix specified");
if ( 3 <= argc )
{
fprintf(stderr, "%s: unexpected extra operand `%s'\n", argv0, argv[2]);
help(stderr, argv0);
exit(1);
}
error(1, 0, "extra operand");
const char* porttix_path = argv[1];

View File

@ -800,20 +800,18 @@ void PurifyMakeflags()
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, "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);
}
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");
fprintf(fp, "There is NO WARRANTY, to the extent permitted by law.\n");
}
int main(int argc, char* argv[])
@ -839,7 +837,7 @@ int main(int argc, char* argv[])
for ( int i = 0; i < argc; i++ )
{
const char* arg = argv[i];
if ( arg[0] != '-' )
if ( arg[0] != '-' || !arg[1] )
continue;
argv[i] = NULL;
if ( !strcmp(arg, "--") )
@ -849,14 +847,15 @@ int main(int argc, char* argv[])
while ( char c = *++arg ) switch ( c )
{
default:
fprintf(stderr, "%s: unknown option -- `%c'\n", argv0, c);
Usage(stderr, argv0);
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, "--usage") ) { Usage(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 if ( GET_OPTION_VARIABLE("--build", &minfo.build) ) { }
else if ( GET_OPTION_VARIABLE("--destination", &minfo.destination) ) { }
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
{
fprintf(stderr, "%s: unknown option: `%s'\n", argv0, arg);
Usage(stderr, argv0);
fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
help(stderr, argv0);
exit(1);
}
}
@ -881,24 +880,22 @@ int main(int argc, char* argv[])
if ( !(minfo.start_step = step_of_step_name(start_step_string)) )
{
fprintf(stderr, "%s: no such step `%s'\n", argv0, start_step_string);
Usage(stderr, argv0);
exit(1);
}
if ( !(minfo.end_step = step_of_step_name(end_step_string)) )
{
fprintf(stderr, "%s: no such step `%s'\n", argv0, end_step_string);
Usage(stderr, argv0);
exit(1);
}
if ( argc == 1 )
{
Usage(stdout, argv0);
help(stdout, argv0);
exit(0);
}
CompactArguments(&argc, &argv);
compact_arguments(&argc, &argv);
if ( minfo.prefix && !strcmp(minfo.prefix, "/") )
minfo.prefix[0] = '\0';
@ -906,14 +903,12 @@ int main(int argc, char* argv[])
if ( argc < 2 )
{
fprintf(stderr, "%s: no package specified\n", argv0);
Usage(stderr, argv0);
exit(1);
}
if ( 2 < argc )
{
fprintf(stderr, "%s: unexpected extra operand `%s'\n", argv0, argv[2]);
Usage(stderr, argv0);
exit(1);
}

View File

@ -44,20 +44,18 @@
#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, "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);
}
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");
fprintf(fp, "There is NO WARRANTY, to the extent permitted by law.\n");
}
int main(int argc, char* argv[])
@ -81,7 +79,7 @@ int main(int argc, char* argv[])
for ( int i = 0; i < argc; i++ )
{
const char* arg = argv[i];
if ( arg[0] != '-' )
if ( arg[0] != '-' || !arg[1] )
continue;
argv[i] = NULL;
if ( !strcmp(arg, "--") )
@ -91,34 +89,37 @@ int main(int argc, char* argv[])
while ( char c = *++arg ) switch ( c )
{
default:
fprintf(stderr, "%s: unknown option -- `%c'\n", argv0, c);
Usage(stderr, argv0);
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, "--usage") ) { Usage(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 if ( GET_OPTION_VARIABLE("--collection", &collection) ) { }
else if ( GET_OPTION_VARIABLE("--platform", &platform) ) { }
else if ( GET_OPTION_VARIABLE("--prefix", &prefix) ) { }
else if ( !strcmp(arg, "--enable-multiarch") ) { use_multiarch = true; }
else if ( !strcmp(arg, "--disable-multiarch") ) { use_multiarch = false; }
else if ( !strcmp(arg, "--enable-multiarch") )
use_multiarch = true;
else if ( !strcmp(arg, "--disable-multiarch") )
use_multiarch = false;
else
{
fprintf(stderr, "%s: unknown option: `%s'\n", argv0, arg);
Usage(stderr, argv0);
fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
help(stderr, argv0);
exit(1);
}
}
if ( argc == 1 )
{
Usage(stdout, argv0);
help(stdout, argv0);
exit(0);
}
CompactArguments(&argc, &argv);
compact_arguments(&argc, &argv);
ParseOptionalCommandLineCollectionPrefix(&collection, &argc, &argv);
VerifyCommandLineCollection(&collection);
@ -129,7 +130,6 @@ int main(int argc, char* argv[])
if ( argc == 1 )
{
error(0, 0, "error: no command specified.");
Usage(stderr, argv0);
exit(1);
}
@ -189,7 +189,6 @@ int main(int argc, char* argv[])
else
{
fprintf(stderr, "%s: unknown command: `%s'\n", argv0, cmd);
Usage(stderr, argv0);
exit(1);
}

View File

@ -145,15 +145,18 @@ void execdiff(int tree_a, const char* tree_a_path,
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, "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[])
@ -162,7 +165,7 @@ int main(int argc, char* argv[])
for ( int i = 0; i < argc; i++ )
{
const char* arg = argv[i];
if ( arg[0] != '-' )
if ( arg[0] != '-' || !arg[1] )
continue;
argv[i] = NULL;
if ( !strcmp(arg, "--") )
@ -172,16 +175,18 @@ int main(int argc, char* argv[])
while ( char c = *++arg ) switch ( c )
{
default:
fprintf(stderr, "%s: unknown option -- `%c'\n", argv0, c);
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, "--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);
fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
help(stderr, argv0);
exit(1);
}
@ -193,21 +198,13 @@ int main(int argc, char* argv[])
exit(0);
}
CompactArguments(&argc, &argv);
compact_arguments(&argc, &argv);
if ( argc < 3 )
{
fprintf(stderr, "%s: you need to specify two directories\n", argv0);
help(stderr, argv0);
exit(1);
}
error(1, 0, "You need to specify two directories");
if ( 3 < argc )
{
fprintf(stderr, "%s: unexpected extra operand `%s'\n", argv0, argv[2]);
help(stderr, argv0);
exit(1);
}
error(1, 0, "extra operand");
const char* tree_a_path = argv[1];
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;
}
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, "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[])
@ -193,7 +196,7 @@ int main(int argc, char* argv[])
for ( int i = 0; i < argc; i++ )
{
const char* arg = argv[i];
if ( arg[0] != '-' )
if ( arg[0] != '-' || !arg[1] )
continue;
argv[i] = NULL;
if ( !strcmp(arg, "--") )
@ -204,31 +207,30 @@ int main(int argc, char* argv[])
{
case 'c': check = true; break;
default:
fprintf(stderr, "%s: unknown option -- `%c'\n", argv0, c);
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, "--check") ) { check = true; }
else if ( !strcmp(arg, "--help") )
help(stdout, argv0), exit(0);
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
{
fprintf(stderr, "%s: unknown option: `%s'\n", argv0, arg);
fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
help(stderr, argv0);
exit(1);
}
}
CompactArguments(&argc, &argv);
compact_arguments(&argc, &argv);
if ( 2 < argc )
{
fprintf(stderr, "%s: unexpected extra operand `%s'\n", argv0, argv[2]);
help(stderr, argv0);
exit(1);
}
error(1, 0, "extra operand");
const char* input_path = "<stdin>";
FILE* input = stdin;

View File

@ -142,20 +142,18 @@ void MarkPackageAsInstalled(const char* tixdb_path, const char* package)
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, "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);
}
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");
fprintf(fp, "There is NO WARRANTY, to the extent permitted by law.\n");
}
int main(int argc, char* argv[])
@ -169,7 +167,7 @@ int main(int argc, char* argv[])
for ( int i = 0; i < argc; i++ )
{
const char* arg = argv[i];
if ( arg[0] != '-' )
if ( arg[0] != '-' || !arg[1] )
continue;
argv[i] = NULL;
if ( !strcmp(arg, "--") )
@ -179,38 +177,39 @@ int main(int argc, char* argv[])
while ( char c = *++arg ) switch ( c )
{
default:
fprintf(stderr, "%s: unknown option -- `%c'\n", argv0, c);
Usage(stderr, argv0);
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, "--usage") ) { Usage(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 if ( GET_OPTION_VARIABLE("--collection", &collection) ) { }
else if ( GET_OPTION_VARIABLE("--prefix", &prefix) ) { }
else if ( GET_OPTION_VARIABLE("--tar", &tar) ) { }
else if ( !strcmp(arg, "--reinstall") ) { reinstall = true; }
else if ( !strcmp(arg, "--reinstall") )
reinstall = true;
else
{
fprintf(stderr, "%s: unknown option: `%s'\n", argv0, arg);
Usage(stderr, argv0);
fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
help(stderr, argv0);
exit(1);
}
}
if ( argc == 1 )
{
Usage(stdout, argv0);
help(stdout, argv0);
exit(0);
}
CompactArguments(&argc, &argv);
compact_arguments(&argc, &argv);
if ( argc <= 1 )
{
fprintf(stderr, "%s: no package specified\n", argv0);
Usage(stderr, argv0);
exit(1);
}
@ -222,7 +221,6 @@ int main(int argc, char* argv[])
fprintf(stderr, "%s: no collection prefix specified, use --collection "
"or TIX_COLLECTION to specify where the package will "
"installed.\n", argv0);
Usage(stderr, argv0);
exit(1);
}

View File

@ -166,15 +166,18 @@ bool rmpatch(FILE* input, const char* input_path, bool check)
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, "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[])
@ -186,7 +189,7 @@ int main(int argc, char* argv[])
for ( int i = 0; i < argc; i++ )
{
const char* arg = argv[i];
if ( arg[0] != '-' )
if ( arg[0] != '-' || !arg[1] )
continue;
argv[i] = NULL;
if ( !strcmp(arg, "--") )
@ -202,26 +205,25 @@ int main(int argc, char* argv[])
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, "--check") ) { check = true; }
else if ( !strcmp(arg, "--help") )
help(stdout, argv0), exit(0);
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
{
fprintf(stderr, "%s: unknown option: `%s'\n", argv0, arg);
fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
help(stderr, argv0);
exit(1);
}
}
CompactArguments(&argc, &argv);
compact_arguments(&argc, &argv);
if ( 2 < argc )
{
fprintf(stderr, "%s: unexpected extra operand `%s'\n", argv0, argv[2]);
help(stderr, argv0);
exit(1);
}
error(1, 0, "extra operand");
const char* input_path = "<stdin>";
FILE* input = stdin;

View File

@ -151,20 +151,18 @@ void InstallPackageOfName(params_t* params, const char* pkg_name)
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, "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);
}
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");
fprintf(fp, "There is NO WARRANTY, to the extent permitted by law.\n");
}
int main(int argc, char* argv[])
@ -178,7 +176,7 @@ int main(int argc, char* argv[])
for ( int i = 0; i < argc; i++ )
{
const char* arg = argv[i];
if ( arg[0] != '-' )
if ( arg[0] != '-' || !arg[1] )
continue;
argv[i] = NULL;
if ( !strcmp(arg, "--") )
@ -188,32 +186,33 @@ int main(int argc, char* argv[])
while ( char c = *++arg ) switch ( c )
{
default:
fprintf(stderr, "%s: unknown option -- `%c'\n", argv0, c);
Usage(stderr, argv0);
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, "--usage") ) { Usage(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 if ( GET_OPTION_VARIABLE("--collection", &params.collection) ) { }
else if ( GET_OPTION_VARIABLE("--tar", &params.tar) ) { }
else if ( GET_OPTION_VARIABLE("--tix-install", &params.tix_install) ) { }
else
{
fprintf(stderr, "%s: unknown option: `%s'\n", argv0, arg);
Usage(stderr, argv0);
fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
help(stderr, argv0);
exit(1);
}
}
if ( argc == 1 )
{
Usage(stdout, argv0);
help(stdout, argv0);
exit(0);
}
CompactArguments(&argc, &argv);
compact_arguments(&argc, &argv);
ParseOptionalCommandLineCollectionPrefix(&params.collection, &argc, &argv);
VerifyCommandLineCollection(&params.collection);
@ -242,7 +241,6 @@ int main(int argc, char* argv[])
if ( argc == 1 )
{
error(0, 0, "error: no command specified.");
Usage(stderr, argv0);
exit(1);
}
@ -252,7 +250,6 @@ int main(int argc, char* argv[])
if ( argc == 2 )
{
error(0, 0, "expected list of packages to install after `install'");
Usage(stderr, argv0);
exit(1);
}
@ -280,7 +277,6 @@ int main(int argc, char* argv[])
else
{
fprintf(stderr, "%s: unknown command: `%s'\n", argv0, cmd);
Usage(stderr, argv0);
exit(1);
}
}

View File

@ -443,14 +443,16 @@ int mkdir_p(const char* path, mode_t mode)
return 0;
}
void CompactArguments(int* argc, char*** argv)
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)--;
while ( i < *argc && !(*argv)[i] )
{
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);
*collection = strdup((*argvp)[1]);
(*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);
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;
}
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;
}
}

View File

@ -31,10 +31,6 @@
#include <string.h>
#include <unistd.h>
#if !defined(VERSIONSTR)
#define VERSIONSTR "unknown version"
#endif
static bool cat_fd(int fd, const char* path)
{
struct stat st;
@ -95,12 +91,14 @@ static bool cat_arguments(int argc, char* argv[])
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)

View File

@ -39,10 +39,6 @@
#include <termios.h>
#include <unistd.h>
#if !defined(VERSIONSTR)
#define VERSIONSTR "unknown version"
#endif
bool SetCurrentMode(struct dispmsg_crtc_mode mode)
{
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, "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");
}
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, "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++ )
{
const char* arg = argv[i];
if ( arg[0] != '-' )
break;
if ( arg[0] != '-' || !arg[1] )
break; // Intentionally not continue.
argv[i] = NULL;
if ( !strcmp(arg, "--") )
break;

View File

@ -32,10 +32,6 @@
#include <termios.h>
#include <wchar.h>
#if !defined(VERSIONSTR)
#define VERSIONSTR "unknown version"
#endif
struct line
{
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++ )
{
@ -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, "Columnate lists.\n");
@ -162,7 +158,7 @@ void help(FILE* fp, const char* argv0)
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, "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++ )
{
const char* arg = argv[i];
if ( arg[0] != '-' )
if ( arg[0] != '-' || !arg[1] )
continue;
argv[i] = NULL;
if ( !strcmp(arg, "--") )

View File

@ -35,10 +35,6 @@
#include <timespec.h>
#include <unistd.h>
#if !defined(VERSIONSTR)
#define VERSIONSTR "unknown version"
#endif
const char* BaseName(const char* path)
{
size_t len = strlen(path);
@ -419,7 +415,7 @@ bool CopyAmbigious(int srcdirfd, const char* srcrel, const char* srcpath,
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++ )
{
@ -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, " or: %s [OPTION]... SOURCE... DIRECTORY\n", argv0);
@ -444,7 +440,7 @@ void help(FILE* fp, const char* argv0)
#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, "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++ )
{
const char* arg = argv[i];
if ( arg[0] != '-' )
if ( arg[0] != '-' || !arg[1] )
continue;
argv[i] = NULL;
if ( !strcmp(arg, "--") )

View File

@ -36,10 +36,6 @@
#include <string.h>
#include <unistd.h>
#if !defined(VERSIONSTR)
#define VERSIONSTR "unknown version"
#endif
const int FLAG_ALL = 1 << 0;
const int FLAG_SUMMARIZE = 1 << 1;
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)
{
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

View File

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

View File

@ -27,23 +27,18 @@
#include <errno.h>
#include <error.h>
#if !defined(VERSIONSTR)
#define VERSIONSTR "unknown version"
#endif
void help(const char* argv0)
static void help(FILE* fp, const char* argv0)
{
printf("usage: %s <REQUEST> ...\n", argv0);
printf("Prints a kernel information string.\n");
printf("example: %s name\n", argv0);
printf("example: %s version\n", argv0);
printf("example: %s builddate\n", argv0);
printf("example: %s buildtime\n", argv0);
fprintf(fp, "Usage: %s [OPTION]... REQUEST...\n", argv0);
fprintf(fp, "Prints a kernel information string.\n");
fprintf(fp, "example: %s name\n", argv0);
fprintf(fp, "example: %s version\n", argv0);
fprintf(fp, "example: %s builddate\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, "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");
@ -53,14 +48,34 @@ void version(const char* argv0)
int main(int argc, char* argv[])
{
const char* argv0 = argv[0];
if ( argc < 2 ) { help(argv0); return 0; }
for ( int i = 1; i < argc; i++ )
{
if ( argv[i][0] != '-' ) { continue; }
if ( strcmp(argv[i], "--help") == 0 ) { help(argv0); return 0; }
if ( strcmp(argv[i], "--version") == 0 ) { version(argv0); return 0; }
fprintf(stderr, "%s: unknown option: %s\n", argv0, argv[i]);
return 1;
const char* arg = argv[i];
if ( arg[0] != '-' || !arg[1] )
continue;
argv[i] = NULL;
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;
char* buf = (char*) malloc(bufsize);

View File

@ -28,17 +28,26 @@
#include <string.h>
#include <unistd.h>
#if !defined(VERSIONSTR)
#define VERSIONSTR "unknown version"
#endif
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)--;
}
}
}
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, "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, "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++ )
{
const char* arg = argv[i];
if ( arg[0] != '-' )
if ( arg[0] != '-' || !arg[1] )
continue;
argv[i] = NULL;
if ( !strcmp(arg, "--") )
break;
if ( arg[1] != '-' )
for ( size_t i = 1; arg[i]; i++ )
switch ( arg[i] )
{
case 'f': force = true; break;
case 's': symbolic = true; break;
case 'v': verbose = true; break;
default:
fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, arg[i]);
Help(stderr, argv0);
exit(1);
}
{
while ( char c = *++arg ) switch ( c )
{
case 'f': force = true; break;
case 's': symbolic = true; break;
case 'v': verbose = true; break;
default:
fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, arg[i]);
help(stderr, argv0);
exit(1);
}
}
else if ( !strcmp(arg, "--force") )
force = true;
else if ( !strcmp(arg, "--symbolic") )
symbolic = true;
else if ( !strcmp(arg, "--verbose") )
verbose = true;
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
{
fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
Help(stderr, argv0);
help(stderr, argv0);
exit(1);
}
}
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--;
}
compact_arguments(&argc, &argv);
if ( argc != 3 )
{
const char* what = argc < 3 ? "missing" : "extra";
fprintf(stderr, "%s: %s operand\n", argv0, what);
Help(stderr, argv0);
exit(1);
}
error(1, 0, "%s operand", argc < 3 ? "missing" : "extra");
const char* oldname = argv[1];
const char* newname = argv[2];

View File

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

View File

@ -30,10 +30,6 @@
#include <stdio.h>
#include <string.h>
#if !defined(VERSIONSTR)
#define VERSIONSTR "unknown version"
#endif
void CreateDirectory(const char* path, bool parents, bool verbose)
{
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);
}
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, "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, "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++ )
{
const char* arg = argv[i];
if ( arg[0] != '-' )
if ( arg[0] != '-' || !arg[1] )
continue;
argv[i] = NULL;
if ( !strcmp(arg, "--") )
break;
if ( arg[1] != '-' )
for ( size_t i = 1; arg[i]; i++ )
switch ( arg[i] )
{
case 'p': parents = true; break;
case 'v': verbose = true; break;
default:
fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, arg[i]);
Help(stderr, argv0);
exit(1);
}
{
while ( char c = *++arg ) switch ( c )
{
case 'p': parents = true; break;
case 'v': verbose = true; break;
default:
fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, arg[i]);
help(stderr, argv0);
exit(1);
}
}
else if ( !strcmp(arg, "--parents") )
parents = true;
else if ( !strcmp(arg, "--verbose") )
verbose = true;
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
{
fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
Help(stderr, argv0);
help(stderr, argv0);
exit(1);
}
}
int num_args = 0;
for ( int i = 1; i < argc; i++ )
if ( argv[i] )
num_args++;
compact_arguments(&argc, &argv);
if ( !num_args )
{
fprintf(stderr, "%s: missing operand\n", argv0);
exit(1);
}
if ( argc < 2 )
error(1, 0, "missing operand");
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++ )
{
const char* arg = argv[i];
if ( arg[0] != '-' )
if ( arg[0] != '-' || !arg[1] )
continue;
argv[i] = NULL;
if ( !strcmp(arg, "--") )

View File

@ -36,10 +36,6 @@
#include <unistd.h>
#include <wchar.h>
#if !defined(VERSIONSTR)
#define VERSIONSTR "unknown version"
#endif
struct display_entry
{
wchar_t c;
@ -323,7 +319,7 @@ void pager_push_path(struct pager* pager, const char* path)
close(fd);
}
void compact_arguments(int* argc, char*** argv)
static void compact_arguments(int* argc, char*** argv)
{
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, "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, "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++ )
{
const char* arg = argv[i];
if ( arg[0] != '-' )
if ( arg[0] != '-' || !arg[1] )
continue;
argv[i] = NULL;
if ( !strcmp(arg, "--") )

View File

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

View File

@ -32,10 +32,6 @@
#include <string.h>
#include <unistd.h>
#if !defined(VERSIONSTR)
#define VERSIONSTR "unknown version"
#endif
// TODO: Wrong implementation of -f! It means ignore *nonexistent files*, not
// ignore all errors!
@ -124,13 +120,26 @@ bool RemoveRecursively(int dirfd, const char* full, const char* rel,
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, "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, "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++ )
{
const char* arg = argv[i];
if ( arg[0] != '-' )
if ( arg[0] != '-' || !arg[1] )
continue;
argv[i] = NULL;
if ( !strcmp(arg, "--") )
break;
if ( arg[1] != '-' )
for ( size_t i = 1; arg[i]; i++ )
switch ( arg[i] )
{
case 'f': force = true; break;
case 'r': recursive = true; break;
case 'R': recursive = true; break;
case 'v': verbose = true; break;
default:
fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, arg[i]);
Help(stderr, argv0);
exit(1);
}
{
while ( char c = *++arg ) switch ( c )
{
case 'f': force = true; break;
case 'r': recursive = true; break;
case 'R': recursive = true; break;
case 'v': verbose = true; break;
default:
fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, arg[i]);
help(stderr, argv0);
exit(1);
}
}
else if ( !strcmp(arg, "--force") )
force = true;
else if ( !strcmp(arg, "--recursive") )
recursive = true;
else if ( !strcmp(arg, "--verbose") )
verbose = true;
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
{
fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
Help(stderr, argv0);
help(stderr, argv0);
exit(1);
}
}
int num_args = 0;
for ( int i = 1; i < argc; i++ )
if ( argv[i] )
num_args++;
compact_arguments(&argc, &argv);
if ( !num_args && !force )
{
fprintf(stderr, "%s: missing operand\n", argv0);
exit(1);
}
if ( argc < 2 && !force )
error(1, 0, "missing operand");
int main_ret = 0;
for ( int i = 1; i < argc; i++ )
{
const char* arg = argv[i];
if ( !arg )
continue;
if ( unlink(arg) < 0 )
{
if ( !recursive || errno != EISDIR )

View File

@ -30,17 +30,26 @@
#include <string.h>
#include <unistd.h>
#if !defined(VERSIONSTR)
#define VERSIONSTR "unknown version"
#endif
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)--;
}
}
}
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, "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, "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++ )
{
const char* arg = argv[i];
if ( arg[0] != '-' )
if ( arg[0] != '-' || !arg[1] )
continue;
argv[i] = NULL;
if ( !strcmp(arg, "--") )
break;
if ( arg[1] != '-' )
for ( size_t i = 1; arg[i]; i++ )
switch ( arg[i] )
{
case 'p': parents = true; break;
case 'v': verbose = true; break;
default:
fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, arg[i]);
Help(stderr, argv0);
exit(1);
}
{
while ( char c = *++arg ) switch ( c )
{
case 'p': parents = true; break;
case 'v': verbose = true; break;
default:
fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, arg[i]);
help(stderr, argv0);
exit(1);
}
}
else if ( !strcmp(arg, "--ignore-fail-on-non-empty") )
ignore_non_empty = true;
else if ( !strcmp(arg, "--parents") )
parents = true;
else if ( !strcmp(arg, "--verbose") )
verbose = true;
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
{
fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
Help(stderr, argv0);
help(stderr, argv0);
exit(1);
}
}
int num_args = 0;
for ( int i = 1; i < argc; i++ )
if ( argv[i] )
num_args++;
compact_arguments(&argc, &argv);
if ( !num_args )
{
fprintf(stderr, "%s: missing operand\n", argv0);
exit(1);
}
if ( argc < 2 )
error(1, 0, "missing operand");
for ( int i = 1; i < argc; i++ )
{
const char* arg = argv[i];
if ( !arg )
continue;
// TODO: Support --parents option.
(void) parents;
int ret = rmdir(arg);

View File

@ -29,10 +29,6 @@
#include <error.h>
#include <ctype.h>
#if !defined(VERSIONSTR)
#define VERSIONSTR "unknown version"
#endif
#ifdef HEAD
#define TAIL false
#else
@ -119,20 +115,26 @@ bool processfp(const char* inputname, FILE* fp)
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);
exit(1);
fprintf(fp, "Usage: %s [OPTION]... [FILE]...\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, "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");
@ -141,54 +143,73 @@ void version(const char* argv0)
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++ )
{
const char* arg = argv[i];
if ( arg[0] != '-' ) { continue; }
if ( arg[0] != '-' || !arg[1] )
continue;
argv[i] = NULL;
if ( strcmp(arg, "--") == 0 ) { break; }
const char* nlinesstr = NULL;
if ( strcmp(arg, "--help") == 0 ) { help(argv0); return 0; }
if ( strcmp(arg, "--version") == 0 ) { version(argv0); return 0; }
if ( strcmp(arg, "-q") == 0 ||
strcmp(arg, "--quiet") == 0 ||
strcmp(arg, "--silent") == 0 )
if ( !strcmp(arg, "--") )
break;
if ( isdigit((unsigned char) arg[1]) )
nlinesstr = arg + 1;
else if ( arg[1] != '-' )
{
quiet = true;
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 )
while ( char c = *++arg ) switch ( c )
{
fprintf(stderr, "Bad number of lines: %s\n", nlinesstr);
errusage(argv0);
case 'n':
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);
errusage(argv0);
else if ( !strcmp(arg, "--help") )
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;
for ( int i = 1; i < argc; i++ ) { if ( argv[i] ) { numfiles++; } }
compact_arguments(&argc, &argv);
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;
if ( header )
@ -203,7 +224,6 @@ int main(int argc, char* argv[])
const char* prefix = "";
for ( int i = 1; i < argc; i++ )
{
if ( !argv[i] ) { continue; }
bool isstdin = strcmp(argv[i], "-") == 0;
FILE* fp = isstdin ? stdin : fopen(argv[i], "r");
if ( !fp )
@ -212,7 +232,7 @@ int main(int argc, char* argv[])
result = 1;
continue;
}
bool header = !quiet && (verbose || 1 < numfiles);
bool header = !quiet && (verbose || 2 < argc);
if ( header )
printf("%s==> %s <==\n", prefix, argv[i]);
prefix = "\n";

View File

@ -29,17 +29,13 @@
#include <errno.h>
#include <error.h>
#if !defined(VERSIONSTR)
#define VERSIONSTR "unknown version"
#endif
void help(FILE* fp, const char* argv0)
static 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");
}
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, "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++ )
{
const char* arg = argv[i];
if ( arg[0] != '-' ) { continue; }
if ( arg[0] != '-' || !arg[1] )
continue;
argv[i] = NULL;
if ( !strcmp(arg, "--") ) { break; }
if ( !strcmp(arg, "--help") ) { help(stdout, argv0); exit(0); }
if ( !strcmp(arg, "--version") ) { version(stdout, argv0); exit(0); }
error(0, 0, "unrecognized option: %s", arg);
help(stderr, argv0);
exit(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);
}
}
if ( !isatty(0) || !isatty(1) )

View File

@ -30,18 +30,14 @@
#include <stdlib.h>
#include <string.h>
#if !defined(VERSIONSTR)
#define VERSIONSTR "unknown version"
#endif
const unsigned long PRINT_KERNELNAME = 1UL << 0UL;
const unsigned long PRINT_NODENAME = 1UL << 1UL;
const unsigned long PRINT_KERNELREL = 1UL << 2UL;
const unsigned long PRINT_KERNELVER = 1UL << 3UL;
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;
static const int PRINT_KERNELNAME = 1 << 0;
static const int PRINT_NODENAME = 1 << 1;
static const int PRINT_KERNELREL = 1 << 2;
static const int PRINT_KERNELVER = 1 << 3;
static const int PRINT_MACHINE = 1 << 5;
static const int PRINT_PROCESSOR = 1 << 6;
static const int PRINT_HWPLATFORM = 1 << 7;
static const int PRINT_OPSYS = 1 << 8;
bool has_printed = false;
@ -53,13 +49,26 @@ void DoPrint(const char* msg)
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, "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, "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[])
{
const char* argv0 = argv[0];
unsigned long flags = 0;
int flags = 0;
for ( int i = 1; i < argc; i++ )
{
const char* arg = argv[i];
if ( arg[0] != '-' )
{
fprintf(stderr, "%s: extra operand: %s\n", argv0, arg);
Help(stderr, argv0);
exit(1);
}
if ( arg[0] != '-' || !arg[1] )
continue;
argv[i] = NULL;
if ( !strcmp(arg, "--") )
break;
if ( arg[1] != '-' )
for ( size_t i = 1; arg[i]; i++ )
switch ( arg[i] )
{
case 'a': flags |= LONG_MAX; break;
case 's': flags |= PRINT_KERNELNAME; break;
case 'n': flags |= PRINT_NODENAME; break;
case 'r': flags |= PRINT_KERNELREL; break;
case 'v': flags |= PRINT_KERNELVER; break;
case 'm': flags |= PRINT_MACHINE; break;
case 'p': flags |= PRINT_PROCESSOR; break;
case 'i': flags |= PRINT_HWPLATFORM; break;
case 'o': flags |= PRINT_OPSYS; break;
default:
fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, arg[i]);
Help(stderr, argv0);
exit(1);
}
{
while ( char c = *++arg ) switch ( c )
{
case 'a': flags |= LONG_MAX; break;
case 's': flags |= PRINT_KERNELNAME; break;
case 'n': flags |= PRINT_NODENAME; break;
case 'r': flags |= PRINT_KERNELREL; break;
case 'v': flags |= PRINT_KERNELVER; break;
case 'm': flags |= PRINT_MACHINE; break;
case 'p': flags |= PRINT_PROCESSOR; break;
case 'i': flags |= PRINT_HWPLATFORM; break;
case 'o': flags |= PRINT_OPSYS; break;
default:
fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, arg[i]);
help(stderr, argv0);
exit(1);
}
}
else if ( !strcmp(arg, "--kernel-name") )
flags |= PRINT_KERNELNAME;
else if ( !strcmp(arg, "--nodename") )
@ -114,16 +123,23 @@ int main(int argc, char* argv[])
flags |= PRINT_HWPLATFORM;
else if ( !strcmp(arg, "--operating-system") )
flags |= PRINT_OPSYS;
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
{
fprintf(stderr, "%s: unknown option: %s\n", argv0, arg);
Help(stderr, argv0);
help(stderr, argv0);
exit(1);
}
}
compact_arguments(&argc, &argv);
if ( 1 < argc )
error(1, 0, "extra operand");
static struct utsname utsname;
if ( uname(&utsname) < 0 )
error(1, errno, "uname");

View File

@ -35,10 +35,6 @@
#include <wchar.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_CHARACTERS = 1 << 1;
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)
{
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)--;
}
}
}
bool word_count_file(FILE* fp, const char* path, int flags,

View File

@ -31,10 +31,6 @@
#include <string.h>
#include <unistd.h>
#if !defined(VERSIONSTR)
#define VERSIONSTR "unknown version"
#endif
// 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
// as the logic in these files:
@ -123,13 +119,26 @@ bool Which(const char* filename, const char* path, bool all)
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, "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, "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++ )
{
const char* arg = argv[i];
if ( arg[0] != '-' )
if ( arg[0] != '-' || !arg[1] )
continue;
argv[i] = NULL;
if ( !strcmp(arg, "--") )
break;
if ( arg[1] != '-' )
for ( size_t i = 1; arg[i]; i++ )
switch ( arg[i] )
{
case 'a': all = true; break;
default:
fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, arg[i]);
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); }
{
while ( char c = *++arg ) switch ( c )
{
case 'a': all = true; break;
default:
fprintf(stderr, "%s: unknown option -- '%c'\n", argv0, arg[i]);
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);
help(stderr, argv0);
exit(1);
}
}
int num_args = 0;
for ( int i = 1; i < argc; i++ )
if ( argv[i] )
num_args++;
compact_arguments(&argc, &argv);
if ( !num_args )
{
fprintf(stderr, "%s: missing operand\n", argv0);
exit(1);
}
if ( argc < 2 )
error(1, 0, "missing operand");
const char* path = getenv("PATH");
@ -186,8 +192,6 @@ int main(int argc, char* argv[])
for ( int i = 1; i < argc; i++ )
{
const char* arg = argv[i];
if ( !arg )
continue;
if ( !Which(arg, path, all) )
success = false;
}