mirror of
https://github.com/NikitaIvanovV/ctpv.git
synced 2024-11-27 23:13:07 +01:00
Prepend every script with helpers.sh in runtime
This commit is contained in:
parent
d921371610
commit
5bdf9d372b
14
Makefile
14
Makefile
@ -5,7 +5,7 @@ SRC := $(wildcard *.c)
|
||||
OBJ := $(SRC:.c=.o)
|
||||
DEP := $(OBJ:.o=.d)
|
||||
PRE := $(wildcard prev/*.sh)
|
||||
GEN := gen/prev/scripts.h gen/server.h
|
||||
GEN := gen/prev/scripts.h gen/server.h gen/helpers.h
|
||||
|
||||
CFLAGS += -Os -MD -Wall -Wextra -Wno-unused-parameter
|
||||
LDFLAGS += -lmagic -lcrypto
|
||||
@ -35,13 +35,17 @@ ctpv: $(OBJ)
|
||||
|
||||
ctpv.c: $(GEN)
|
||||
|
||||
gen/prev/scripts.h: $(PRE) embed/embed helpers.sh
|
||||
gen/prev/scripts.h: $(PRE) embed/embed
|
||||
@mkdir -p $(@D)
|
||||
embed/embed -p prev_scr_ -h helpers.sh $(PRE) > $@
|
||||
embed/embed -p prev_scr_ $(PRE) > $@
|
||||
|
||||
gen/server.h: clear.sh end.sh embed/embed helpers.sh
|
||||
gen/server.h: clear.sh end.sh embed/embed
|
||||
@mkdir -p $(@D)
|
||||
embed/embed -p scr_ -h helpers.sh clear.sh end.sh > $@
|
||||
embed/embed -p scr_ clear.sh end.sh > $@
|
||||
|
||||
gen/helpers.h: helpers.sh embed/embed
|
||||
@mkdir -p $(@D)
|
||||
embed/embed -p scr_ helpers.sh > $@
|
||||
|
||||
embed/embed: make_embed
|
||||
@:
|
||||
|
@ -123,9 +123,11 @@ static int run(Preview *p, int *exitcode)
|
||||
|
||||
int sp_arg[] = { pipe_fds[0], pipe_fds[1], STDERR_FILENO };
|
||||
|
||||
char *args[] = SHELL_ARGS(p->script);
|
||||
char *script = prepend_helpers(p->script, p->script_len - 1);
|
||||
char *args[] = SHELL_ARGS(script);
|
||||
int ret = spawn(args, NULL, exitcode, spawn_redirect, sp_arg);
|
||||
|
||||
free(script);
|
||||
close(pipe_fds[1]);
|
||||
|
||||
if (*exitcode != FAILED_PREVIEW_EC) {
|
||||
|
@ -6,6 +6,7 @@
|
||||
typedef struct {
|
||||
char *name, *ext, *type, *subtype, *script;
|
||||
int priority;
|
||||
size_t script_len;
|
||||
} Preview;
|
||||
|
||||
typedef struct {
|
||||
|
@ -1,14 +1,16 @@
|
||||
#include <stdlib.h>
|
||||
#include <limits.h>
|
||||
|
||||
#include "gen/prev/scripts.h"
|
||||
#include "utils.h"
|
||||
#include "preview.h"
|
||||
#include "gen/prev/scripts.h"
|
||||
|
||||
/*
|
||||
* This file is supposed to be included in ctpv.c
|
||||
*/
|
||||
|
||||
#define PP(e, t, s, n, p) { #n, e, t, s, prev_scr_##n##_sh, p }
|
||||
#define PNAME(n) prev_scr_##n##_sh
|
||||
#define PP(e, t, s, n, p) { #n, e, t, s, PNAME(n), p, LEN(PNAME(n)) }
|
||||
#define PR(e, t, s, n) PP(e, t, s, n, 0)
|
||||
|
||||
Preview previews[] = {
|
||||
@ -21,3 +23,5 @@ Preview previews[] = {
|
||||
PR(NULL, "video", NULL, video),
|
||||
PR(NULL, "application", "pdf", pdf),
|
||||
};
|
||||
|
||||
/* vim: set nowrap: */
|
||||
|
26
server.c
26
server.c
@ -118,20 +118,26 @@ exit:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int run_script(char *script, size_t script_len, char *arg)
|
||||
{
|
||||
int ret = OK;
|
||||
|
||||
char *s = prepend_helpers(script, script_len);
|
||||
char *args[] = SHELL_ARGS(s, arg);
|
||||
int exitcode;
|
||||
ERRCHK_GOTO_OK(spawn(args, NULL, &exitcode, NULL, NULL), ret, cleanup);
|
||||
|
||||
cleanup:
|
||||
free(s);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int server_clear(void)
|
||||
{
|
||||
char *args[] = SHELL_ARGS(scr_clear_sh);
|
||||
int exitcode;
|
||||
ERRCHK_RET_OK(spawn(args, NULL, &exitcode, NULL, NULL));
|
||||
|
||||
return OK;
|
||||
return run_script(scr_clear_sh, LEN(scr_clear_sh)-1, "");
|
||||
}
|
||||
|
||||
int server_end(const char *id_s)
|
||||
{
|
||||
char *args[] = SHELL_ARGS(scr_end_sh, (char *)id_s);
|
||||
int exitcode;
|
||||
ERRCHK_RET_OK(spawn(args, NULL, &exitcode, NULL, NULL));
|
||||
|
||||
return OK;
|
||||
return run_script(scr_end_sh, LEN(scr_end_sh)-1, (char *)id_s);
|
||||
}
|
||||
|
34
shell.c
Normal file
34
shell.c
Normal file
@ -0,0 +1,34 @@
|
||||
#include <string.h>
|
||||
|
||||
#include "shell.h"
|
||||
#include "error.h"
|
||||
#include "gen/helpers.h"
|
||||
|
||||
/*
|
||||
* Returns string with helpers.sh prepended
|
||||
*
|
||||
* User must call free()
|
||||
*/
|
||||
char *prepend_helpers(char *str, size_t len)
|
||||
{
|
||||
char *buf, *b;
|
||||
size_t mlen;
|
||||
|
||||
if (!(buf = malloc(sizeof(*buf) * (LEN(scr_helpers_sh) + len)))) {
|
||||
PRINTINTERR(FUNCFAILED("malloc"), ERRNOS);
|
||||
abort();
|
||||
}
|
||||
|
||||
b = buf;
|
||||
mlen = LEN(scr_helpers_sh);
|
||||
memcpy(b, scr_helpers_sh, mlen);
|
||||
|
||||
b += (mlen - 1) * sizeof(*str);
|
||||
mlen = len;
|
||||
memcpy(b, str, mlen);
|
||||
|
||||
b += mlen * sizeof(*str);
|
||||
b[0] = '\0';
|
||||
|
||||
return buf;
|
||||
}
|
6
shell.h
6
shell.h
@ -1,7 +1,11 @@
|
||||
#ifndef SHELL_H
|
||||
#define SHELL_H
|
||||
|
||||
#include "utils.h"
|
||||
|
||||
#define SHELL_ARGS(script, ...) \
|
||||
{ "sh", "-c", script, "sh", __VA_ARGS__ __VA_OPT__(,) NULL }
|
||||
{ "/bin/sh", "-c", script, "/bin/sh", __VA_ARGS__ __VA_OPT__(,) NULL }
|
||||
|
||||
char *prepend_helpers(char *str, size_t len);
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user