mirror of
https://github.com/EnderIce2/Fennix.git
synced 2025-05-25 22:14:34 +00:00
94 lines
2.3 KiB
C
94 lines
2.3 KiB
C
/*
|
|
This file is part of Fennix C Library.
|
|
|
|
Fennix C Library is free software: you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License as
|
|
published by the Free Software Foundation, either version 3 of
|
|
the License, or (at your option) any later version.
|
|
|
|
Fennix C Library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with Fennix C Library. If not, see <https://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <stdbool.h>
|
|
|
|
#ifndef PROGRAM_VERSION
|
|
#define PROGRAM_VERSION "<unknown>"
|
|
#endif
|
|
|
|
int printf(const char *, ...);
|
|
int _dl_main(int, char *[], char *[]);
|
|
|
|
void print_license()
|
|
{
|
|
printf("Fennix C Library Interpreter Copyright (C) %s EnderIce2\n", (__DATE__ + 7));
|
|
printf("This program comes with ABSOLUTELY NO WARRANTY.\n");
|
|
printf("This is free software, and you are welcome to redistribute it\n");
|
|
printf("under certain conditions.\n");
|
|
}
|
|
|
|
void print_version()
|
|
{
|
|
printf("%s\n", PROGRAM_VERSION);
|
|
}
|
|
|
|
void print_help()
|
|
{
|
|
printf("Usage: ld.so [options] <program>\n");
|
|
printf("Options:\n");
|
|
printf(" --help Display this help message\n");
|
|
printf(" --version Display version information\n");
|
|
printf(" --license Display license information\n");
|
|
printf("\n");
|
|
print_license();
|
|
}
|
|
|
|
bool IsManuallyInvoked(const char *argv0)
|
|
{
|
|
const char *lastSlash = strrchr(argv0, '/');
|
|
const char *name = lastSlash ? lastSlash + 1 : argv0;
|
|
/* TODO: check if exe is actually "ld.so" or it has other name */
|
|
return strcmp(name, "ld.so") == 0;
|
|
}
|
|
|
|
extern char **environ;
|
|
int main(int argc, char *argv[], char *envp[])
|
|
{
|
|
environ = envp;
|
|
if (!IsManuallyInvoked(argv[0]))
|
|
{
|
|
int status = _dl_main(argc, argv, envp);
|
|
return status;
|
|
}
|
|
|
|
for (int i = 1; i < argc; i++)
|
|
{
|
|
if (strcmp(argv[i], "--help") == 0)
|
|
{
|
|
print_help();
|
|
return 0;
|
|
}
|
|
if (strcmp(argv[i], "--version") == 0)
|
|
{
|
|
print_version();
|
|
return 0;
|
|
}
|
|
if (strcmp(argv[i], "--license") == 0)
|
|
{
|
|
print_license();
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
printf("Error: No program specified.\n");
|
|
printf("Try 'ld.so --help' for more information.\n");
|
|
return -1;
|
|
}
|