From ba1c6bf810f13c97eafdcb2b6ed50bd6b689deca Mon Sep 17 00:00:00 2001 From: Liang Chang Date: Sun, 25 Apr 2021 00:06:33 +0800 Subject: [PATCH] DtTerm: Add libutempter support for utmp/wtmp updates. --- cde/lib/DtTerm/Imakefile | 7 ++++++- cde/lib/DtTerm/TermPrim/Imakefile | 9 +++++++-- cde/lib/DtTerm/TermPrim/TermPrim.c | 14 ++++++++++++++ cde/lib/DtTerm/TermPrim/TermPrimSubproc.c | 4 ++++ 4 files changed, 31 insertions(+), 3 deletions(-) diff --git a/cde/lib/DtTerm/Imakefile b/cde/lib/DtTerm/Imakefile index 6646e7d65..ab700594f 100644 --- a/cde/lib/DtTerm/Imakefile +++ b/cde/lib/DtTerm/Imakefile @@ -53,7 +53,6 @@ TERMPRIM_OBJS = \ TermPrim/TermPrimScroll.o \ TermPrim/TermPrimSelect.o \ TermPrim/TermPrimSetPty.o \ - TermPrim/TermPrimSetUtmp.o \ TermPrim/TermPrimSubproc.o \ TermPrim/TermPrimUtil.o \ TermPrim/TermPrimVersion.o \ @@ -78,6 +77,12 @@ TERMVIEW_OBJS = \ TermView/TermViewGlobalDialog.o \ TermView/TermViewTerminalDialog.o +#if defined(HasUtempterLibrary) && HasUtempterLibrary +REQUIREDLIBS += -lutempter +#else +TERMPRIM_OBJS += TermPrim/TermPrimSetUtmp.o +#endif + OBJS = \ $(TERMPRIM_OBJS) \ $(TERM_OBJS) \ diff --git a/cde/lib/DtTerm/TermPrim/Imakefile b/cde/lib/DtTerm/TermPrim/Imakefile index 46cf8b4ae..74cbdf12f 100644 --- a/cde/lib/DtTerm/TermPrim/Imakefile +++ b/cde/lib/DtTerm/TermPrim/Imakefile @@ -40,7 +40,6 @@ SRCS = \ TermPrimScroll.c \ TermPrimSelect.c \ TermPrimSetPty.c \ - TermPrimSetUtmp.c \ TermPrimSubproc.c \ TermPrimUtil.c \ TermPrimVersion.c \ @@ -69,12 +68,18 @@ OBJS = \ TermPrimScroll.o \ TermPrimSelect.o \ TermPrimSetPty.o \ - TermPrimSetUtmp.o \ TermPrimSubproc.o \ TermPrimUtil.o \ TermPrimVersion.o \ TermPrimWMProtocols.o +#if defined(HasUtempterLibrary) && HasUtempterLibrary +EXTRA_DEFINES = -DHAS_UTEMPTER_LIBRARY +#else +SRCS += TermPrimSetUtmp.c +OBJS += TermPrimSetUtmp.o +#endif + #include #if defined(HasPtsDriver) && HasPtsDriver diff --git a/cde/lib/DtTerm/TermPrim/TermPrim.c b/cde/lib/DtTerm/TermPrim/TermPrim.c index 16053c2c3..3688e4623 100644 --- a/cde/lib/DtTerm/TermPrim/TermPrim.c +++ b/cde/lib/DtTerm/TermPrim/TermPrim.c @@ -82,6 +82,10 @@ extern char * _DtTermPrimGetMessage( char *filename, int set, int n, char *s ); # include #endif +#ifdef HAS_UTEMPTER_LIBRARY +#include +#endif + extern void TermReadKey(Widget w, XEvent *event, String *params, Cardinal *num_params); static void ClassInitialize(void); @@ -1068,7 +1072,9 @@ Initialize(Widget ref_w, Widget w, Arg *args, Cardinal *num_args) /* ** Initialize the utmp stuff... */ +#ifndef HAS_UTEMPTER_LIBRARY _DtTermPrimUtmpInit(w); +#endif /* ** Initialize the selection inforamtion @@ -2478,8 +2484,12 @@ Realize(Widget w, XtValueMask *p_valueMask, XSetWindowAttributes *attributes) /* get the utmp line name to use for searching later... */ if (tw->term.pty >= 0) { +#ifdef HAS_UTEMPTER_LIBRARY + utempter_add_record(tw->term.pty, DisplayString(XtDisplay(w))); +#else tw->term.tpd->utmpId = _DtTermPrimUtmpGetUtLine(-1, tw->term.ptySlaveName); +#endif } /* @@ -2620,11 +2630,15 @@ Destroy(Widget w) _DtTermPrimToggleSuidRoot(False); /* clean up our utmp entry... */ +#ifdef HAS_UTEMPTER_LIBRARY + utempter_remove_added_record(); +#else if (tw->term.tpd && tw->term.tpd->utmpId && *tw->term.tpd->utmpId) { _DtTermPrimUtmpEntryDestroy(w, tw->term.tpd->utmpId); (void) XtFree(tw->term.tpd->utmpId); tw->term.tpd->utmpId = (char *) 0; } +#endif /* close and release the... */ diff --git a/cde/lib/DtTerm/TermPrim/TermPrimSubproc.c b/cde/lib/DtTerm/TermPrim/TermPrimSubproc.c index 367cf694d..c61d472df 100644 --- a/cde/lib/DtTerm/TermPrim/TermPrimSubproc.c +++ b/cde/lib/DtTerm/TermPrim/TermPrimSubproc.c @@ -573,8 +573,10 @@ _DtTermPrimSubprocExec(Widget w, } /* set our utmp entry... */ +#ifndef HAS_UTEMPTER_LIBRARY (void) _DtTermPrimUtmpEntryCreate(w, getpid(), ((DtTermPrimitiveWidget)w)->term.tpd->utmpId); +#endif if (isDebugSet('T')) { #ifdef BBA @@ -652,7 +654,9 @@ _DtTermPrimSubprocExec(Widget w, /* assume that our child set up a utmp entry (since we have no way * for it to report to us) and add it to the list to cleanup)... */ +#ifndef HAS_UTEMPTER_LIBRARY _DtTermPrimUtmpAddEntry(((DtTermPrimitiveWidget)w)->term.tpd->utmpId); +#endif return(pid); }