cp $OPT VentoyWeb.sh $tmpdir/
cp $OPT VentoyGUI* $tmpdir/
-#cp $OPT Ventoy.desktop $tmpdir/
+
cp $OPT README $tmpdir/
cp $OPT plugin $tmpdir/
cp $OPT CreatePersistentImg.sh $tmpdir/
dos2unix -q $tmpdir/Ventoy2Disk.sh
dos2unix -q $tmpdir/VentoyWeb.sh
-#dos2unix -q $tmpdir/Ventoy.desktop
+
dos2unix -q $tmpdir/CreatePersistentImg.sh
dos2unix -q $tmpdir/ExtendPersistentImg.sh
cp $OPT $LANG_DIR/languages.json $tmpdir/tool/
-#chmod +x $tmpdir/Ventoy.desktop
+
chmod +x $tmpdir/CreatePersistentImg.sh
chmod +x $tmpdir/ExtendPersistentImg.sh
cp $OPT $LANG_DIR/languages.json $tmpdir/ventoy/
rm -rf $tmpdir/tool
rm -f $tmpdir/*.sh
+rm -f $tmpdir/VentoyGUI.*
rm -rf $tmpdir/WebUI
rm -f $tmpdir/README
#include <QMessageBox>
#include <QFileInfo>
#include <QStyle>
+#include <QDir>
#include <QDesktopWidget>
#include <QPixmap>
#include <unistd.h>
int main(int argc, char *argv[])
{
int ret;
+ long long size;
QApplication a(argc, argv);
Ventoy2DiskWindow w;
}
#endif
+ if (!QFileInfo::exists("./boot/boot.img"))
+ {
+ QString curdir = a.applicationDirPath();
+ int index = curdir.indexOf("/tool/");
+
+ if (index >= 0)
+ {
+ QDir::setCurrent(curdir.left(index));
+ }
+ else
+ {
+ QDir::setCurrent(curdir);
+ }
+ }
+
if (!QFileInfo::exists("./boot/boot.img"))
{
QMessageBox::critical(NULL, "Error", "Please run under the correct directory.");
}
}
+ QFileInfo Info(g_log_file);
+ size = (long long)Info.size();
+ if (size >= 4 * SIZE_1MB)
+ {
+ QFile::remove(g_log_file);
+ }
+
vlog("===================================================\n");
vlog("===== Ventoy2Disk %s powered by QT %s =====\n", ventoy_get_local_version(), qVersion());
vlog("===================================================\n");
+ vlog("log file is <%s> lastsize:%lld\n", g_log_file, (long long)size);
+ vlog("ini file is <%s>\n", g_ini_file);
ventoy_disk_init();
ventoy_http_init();
#include <time.h>
#include <unistd.h>\r
#include <sys/types.h>\r
+#include <sys/stat.h>\r
#include <linux/limits.h>\r
#include <ventoy_define.h>
#include <ventoy_util.h>\r
return ret;\r
}\r
\r
+static int adjust_cur_dir(char *argv0)\r
+{\r
+ int ret = 2;\r
+ char c;\r
+ char *pos = NULL;\r
+ char *end = NULL;\r
+\r
+ if (argv0[0] == '.')\r
+ {\r
+ return 1;\r
+ }\r
+\r
+ for (pos = argv0; pos && *pos; pos++)\r
+ {\r
+ if (*pos == '/')\r
+ {\r
+ end = pos;\r
+ }\r
+ }\r
+\r
+ if (end)\r
+ {\r
+ c = *end;\r
+ *end = 0;\r
+\r
+ pos = strstr(argv0, "/tool/");\r
+ if (pos)\r
+ {\r
+ *pos = 0;\r
+ }\r
+ \r
+ ret = chdir(argv0);\r
+ \r
+ *end = c;\r
+ if (pos)\r
+ {\r
+ *pos = '/';\r
+ }\r
+ }\r
+\r
+ return ret;\r
+}\r
+\r
int main(int argc, char *argv[])\r
{\r
int i;\r
GtkWidget *pWidget = NULL;\r
GtkBuilder *pBuilder = NULL;\r
GError *error = NULL;\r
+ struct stat logstat;\r
\r
gtk_init(&argc, &argv);\r
\r
return EACCES;\r
}\r
\r
+ if (access("./boot/boot.img", F_OK) == -1)\r
+ {\r
+ adjust_cur_dir(argv[0]); \r
+ }\r
+\r
if (access("./boot/boot.img", F_OK) == -1)\r
{\r
early_msgbox(GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "Please run under the correct directory.");\r
}
}\r
\r
+ memset(&logstat, 0, sizeof(logstat));\r
+ if (0 == stat(g_log_file, &logstat))\r
+ {\r
+ if (logstat.st_size >= 4 * SIZE_1MB)\r
+ {\r
+ remove(g_log_file);\r
+ }\r
+ }\r
+\r
ventoy_log_init();\r
\r
vlog("================================================\n");\r
vlog("===== Ventoy2Disk %s powered by GTK%d.x =====\n", ventoy_get_local_version(), GTK_MAJOR_VERSION);\r
vlog("================================================\n");\r
+ vlog("log file is <%s> lastsize:%lld\n", g_log_file, (long long)logstat.st_size);\r
+ vlog("ini file is <%s>\n", g_ini_file);\r
\r
ventoy_disk_init();\r
#define LD_CACHE_FILE "/etc/ld.so.cache"
#define INT2STR_YN(a) ((a) == 0 ? "NO" : "YES")
+static int g_xdg_log = 0;
+static int g_xdg_ini = 0;
static char g_log_file[PATH_MAX];
+static char g_ini_file[PATH_MAX];
static char *g_log_buf = NULL;
extern char ** environ;
if (envs)
{
vlog("recover success, argc=%d evecve <%s>\n", j, guiexe);
+ dump_args("EXECVE", newargv);
execve(guiexe, newargv, envs);
}
else
newargv[j++] = pkexec;
newargv[j++] = path;
- for (i = 1; i < argc && j < MAX_PARAS - 2; i++)
+ for (i = 1; i < argc && j < MAX_PARAS; i++)
{
+ if (strcmp(argv[i], "--xdg") == 0)
+ {
+ continue;
+ }
newargv[j++] = argv[i];
}
- newargv[j++] = create_environ_param(VTOY_ENV_STR, environ);
- newargv[j++] = exepara;
+
+ if (j < MAX_PARAS)
+ {
+ newargv[j++] = create_environ_param(VTOY_ENV_STR, environ);
+ }
+
+ if (j < MAX_PARAS)
+ {
+ newargv[j++] = exepara;
+ }
+
+ if (g_xdg_log && j + 1 < MAX_PARAS)
+ {
+ newargv[j++] = "-l";
+ newargv[j++] = g_log_file;
+ }
+
+ if (g_xdg_ini && j + 1 < MAX_PARAS)
+ {
+ newargv[j++] = "-i";
+ newargv[j++] = g_ini_file;
+ }
dump_args("PKEXEC", newargv);
execv(pkexec, newargv);
return pstNode ? 1 : 0;
}
-static int detect_gui_exe_path(const char *curpath, char *pathbuf, int buflen)
+static int detect_gui_exe_path(int argc, char **argv, const char *curpath, char *pathbuf, int buflen)
{
+ int i;
int ret;
int ver;
int libflag = 0;
char line[256];
mode_t mode;
struct stat filestat;
-
- if (access("./ventoy_gui_type", F_OK) != -1)
+
+ for (i = 1; i < argc; i++)
+ {
+ if (argv[i] && strcmp(argv[i], "--gtk2") == 0)
+ {
+ guitype = "gtk";
+ ver = 2;
+ }
+ else if (argv[i] && strcmp(argv[i], "--gtk3") == 0)
+ {
+ guitype = "gtk";
+ ver = 3;
+ }
+ else if (argv[i] && strcmp(argv[i], "--gtk4") == 0)
+ {
+ guitype = "gtk";
+ ver = 4;
+ }
+ else if (argv[i] && strcmp(argv[i], "--qt4") == 0)
+ {
+ guitype = "qt";
+ ver = 4;
+ }
+ else if (argv[i] && strcmp(argv[i], "--qt5") == 0)
+ {
+ guitype = "qt";
+ ver = 5;
+ }
+ else if (argv[i] && strcmp(argv[i], "--qt6") == 0)
+ {
+ guitype = "qt";
+ ver = 6;
+ }
+ }
+
+ if (guitype)
+ {
+ vlog("Get GUI type from param <%s%d>.\n", guitype, ver);
+ }
+ else if (access("./ventoy_gui_type", F_OK) != -1)
{
vlog("Get GUI type from ventoy_gui_type file.\n");
vlog("=============== VentoyGui %s ===============\n", VTOY_GUI_ARCH);
vlog("=========================================================\n");
vlog("=========================================================\n");
+ vlog("log file is <%s>\n", g_log_file);
euid = geteuid();
getcwd(curpath, sizeof(curpath));
return 1;
}
- if (detect_gui_exe_path(curpath, path, sizeof(path)))
+ if (detect_gui_exe_path(argc, argv, curpath, path, sizeof(path)))
{
return 1;
}
{
vlog("We have root privileges, just exec %s\n", path);
argv[0] = path;
- argv[1] = NULL;
execv(argv[0], argv);
}
else
{
int i;
int ret;
+ const char *env = NULL;
snprintf(g_log_file, sizeof(g_log_file), "log.txt");
for (i = 0; i < argc; i++)
snprintf(g_log_file, sizeof(g_log_file), "%s", argv[i + 1]);
break;
}
+ else if (argv[i] && strcmp(argv[i], "--xdg") == 0)
+ {
+ env = getenv("XDG_CACHE_HOME");
+ if (env)
+ {
+ g_xdg_log = 1;
+ snprintf(g_log_file, sizeof(g_log_file), "%s/ventoy.log", env);
+ }
+
+ env = getenv("XDG_CONFIG_HOME");
+ if (env)
+ {
+ g_xdg_ini = 1;
+ snprintf(g_ini_file, sizeof(g_ini_file), "%s/Ventoy2Disk.ini", env);
+ }
+ }
}
g_log_buf = malloc(MAX_LOG_BUF);