Author: bapt
Date: Sun Feb  8 22:11:24 2015
New Revision: 278411
URL: https://svnweb.freebsd.org/changeset/base/278411

Log:
  MFC: r265863
  
  libedit: add H_SAVE_FP which saves history to a file pointer.
  
  H_SAVE_FP is similar to H_SAVE but operates on a FILE* instead of a filename.
  This is useful when operating in capability mode.
  
  Reviewed by:  chris...@netbsd.org, pfg

Modified:
  stable/10/lib/libedit/editline.3
  stable/10/lib/libedit/hist.h
  stable/10/lib/libedit/histedit.h
  stable/10/lib/libedit/history.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/lib/libedit/editline.3
==============================================================================
--- stable/10/lib/libedit/editline.3    Sun Feb  8 21:58:25 2015        
(r278410)
+++ stable/10/lib/libedit/editline.3    Sun Feb  8 22:11:24 2015        
(r278411)
@@ -682,6 +682,9 @@ Load the history list stored in
 .It Dv H_SAVE , Fa "const char *file"
 Save the history list to
 .Fa file .
+.It Dv H_SAVE_FP , Fa "FILE*"
+Save the history list to the opened
+.Fa FILE* .
 .It Dv H_SETUNIQUE , Fa "int unique"
 Set flag that adjacent identical event strings should not be entered
 into the history.

Modified: stable/10/lib/libedit/hist.h
==============================================================================
--- stable/10/lib/libedit/hist.h        Sun Feb  8 21:58:25 2015        
(r278410)
+++ stable/10/lib/libedit/hist.h        Sun Feb  8 22:11:24 2015        
(r278411)
@@ -65,6 +65,7 @@ typedef struct el_history_t {
 #define        HIST_SET(el, num)       HIST_FUN(el, H_SET, num)
 #define        HIST_LOAD(el, fname)    HIST_FUN(el, H_LOAD fname)
 #define        HIST_SAVE(el, fname)    HIST_FUN(el, H_SAVE fname)
+#define        HIST_SAVE_FP(el, fp)    HIST_FUN(el, H_SAVE_FP fp)
 
 protected int          hist_init(EditLine *);
 protected void         hist_end(EditLine *);

Modified: stable/10/lib/libedit/histedit.h
==============================================================================
--- stable/10/lib/libedit/histedit.h    Sun Feb  8 21:58:25 2015        
(r278410)
+++ stable/10/lib/libedit/histedit.h    Sun Feb  8 22:11:24 2015        
(r278411)
@@ -208,6 +208,7 @@ int         history(History *, HistEvent *, int
 #define        H_NEXT_EVDATA   23      /* , const int, histdata_t *);  */
 #define        H_DELDATA       24      /* , int, histdata_t *);*/
 #define        H_REPLACE       25      /* , const char *, histdata_t); */
+#define        H_SAVE_FP       26      /* , FILE*);    */
 
 
 /*

Modified: stable/10/lib/libedit/history.c
==============================================================================
--- stable/10/lib/libedit/history.c     Sun Feb  8 21:58:25 2015        
(r278410)
+++ stable/10/lib/libedit/history.c     Sun Feb  8 22:11:24 2015        
(r278411)
@@ -103,6 +103,7 @@ private int history_getunique(History *,
 private int history_set_fun(History *, History *);
 private int history_load(History *, const char *);
 private int history_save(History *, const char *);
+private int history_save_fp(History *, FILE*);
 private int history_prev_event(History *, HistEvent *, int);
 private int history_next_event(History *, HistEvent *, int);
 private int history_next_string(History *, HistEvent *, const char *);
@@ -773,22 +774,16 @@ done:
        return (i);
 }
 
-
-/* history_save():
- *     History save function
+/* history_save_fp():
+ *     History save with open FILE*
  */
-private int
-history_save(History *h, const char *fname)
+private int history_save_fp(History *h, FILE* fp)
 {
-       FILE *fp;
        HistEvent ev;
        int i = -1, retval;
        size_t len, max_size;
        char *ptr;
 
-       if ((fp = fopen(fname, "w")) == NULL)
-               return (-1);
-
        if (fchmod(fileno(fp), S_IRUSR|S_IWUSR) == -1)
                goto done;
        if (fputs(hist_cookie, fp) == EOF)
@@ -816,6 +811,26 @@ history_save(History *h, const char *fna
 oomem:
        h_free((ptr_t)ptr);
 done:
+       return (i);
+       
+}
+
+
+/* history_save():
+ *     History save function
+ */
+private int
+history_save(History *h, const char *fname)
+{
+       FILE *fp;
+       int i;
+
+       if ((fp = fopen(fname, "w")) == NULL)
+               return (-1);
+
+       i = history_save_fp(h, fp);
+
+done:
        (void) fclose(fp);
        return (i);
 }
@@ -1001,6 +1016,12 @@ history(History *h, HistEvent *ev, int f
                        he_seterrev(ev, _HE_HIST_WRITE);
                break;
 
+       case H_SAVE_FP:
+               retval = history_save_fp(h, va_arg(va, FILE*));
+               if (retval == -1)
+                       he_seterrev(ev, _HE_HIST_WRITE);
+               break;
+
        case H_PREV_EVENT:
                retval = history_prev_event(h, ev, va_arg(va, int));
                break;
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to