summary refs log tree commit diff
path: root/src/libexecline/exlsn_main.c
blob: 8a923e3ad79b925c62fea3af1456ccc3f107e459 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/* ISC license. */

#include <skalibs/bytestr.h>
#include <skalibs/strerr2.h>
#include <skalibs/genalloc.h>
#include <execline/execline.h>
#include "exlsn.h"

void exlsn_main (int argc, char const **argv, char const *const *envp, exls_func *func, char const *usage)
{
  exlsn_t info = EXLSN_ZERO ;
  int r = (*func)(argc, argv, envp, &info) ;
  if (r < 0) switch (r)
  {
    case -4 : strerr_dief1x(100, "empty block") ;
    case -3 : strerr_dieusage(100, usage) ;
    case -2 : strerr_dief1x(111, "bad substitution key") ;
    case -1 : strerr_diefu1sys(111, "complete exlsn function") ;
    default : strerr_diefu2x(111, "complete exlsn function", ": unknown error") ;
  }
  el_substandrun(argc-r, argv+r, envp, &info) ;
}