texlive[44033] Build/source/texk/web2c/synctexdir/synctex.c: Fixed

commits+jlaurens at tug.org commits+jlaurens at tug.org
Tue Apr 25 16:47:15 CEST 2017


Revision: 44033
          http://tug.org/svn/texlive?view=revision&revision=44033
Author:   jlaurens
Date:     2017-04-25 16:47:15 +0200 (Tue, 25 Apr 2017)
Log Message:
-----------
Fixed crashed when synctex is not used

Modified Paths:
--------------
    trunk/Build/source/texk/web2c/synctexdir/synctex.c

Modified: trunk/Build/source/texk/web2c/synctexdir/synctex.c
===================================================================
--- trunk/Build/source/texk/web2c/synctexdir/synctex.c	2017-04-25 06:20:30 UTC (rev 44032)
+++ trunk/Build/source/texk/web2c/synctexdir/synctex.c	2017-04-25 14:47:15 UTC (rev 44033)
@@ -4,7 +4,7 @@
  This file is part of the SyncTeX package.
  
  Version 1
- Latest Revision: Sat Apr 22 10:07:05 UTC 2017
+ Latest Revision: Tue Apr 25 14:46:32 UTC 2017
  
  License:
  --------
@@ -431,13 +431,15 @@
 #   define SYNCTEX_WITH_FORMS (((synctex_ctxt.options)&4)!=0)
 #   define SYNCTEX_H_COMPRESS (((synctex_ctxt.options)&8)!=0)
 
-/*  Initialize the options, synchronize the variables.
- *  This is sent by *tex.web before any TeX macro is used.
- *  */
-void synctexinitcommand(void)
-{
+static inline int _synctex_read_command_line_option(void) {
+#   if SYNCTEX_DEBUG
+    printf("\nSynchronize DEBUG: _synctex_read_command_line_option\n");
+#   endif
     /*  This is a one shot function, any subsequent call is void */
     if (synctex_ctxt.flags.option_read) {
+#   if SYNCTEX_DEBUG
+        printf("\nSynchronize DEBUG: skipped\n");
+#   endif
         return;
     }
     if (SYNCTEX_NO_OPTION == synctex_options) {
@@ -450,6 +452,7 @@
         SYNCTEX_VALUE = 0;
     } else {
         /*  the command line options are not ignored  */
+        synctex_options|=1;
         if (synctex_options < 0) {
             SYNCTEX_NO_GZ = SYNCTEX_YES;
             synctex_ctxt.options = -synctex_options;
@@ -461,6 +464,16 @@
         SYNCTEX_VALUE = synctex_options;
     }
     synctex_ctxt.flags.option_read = SYNCTEX_YES;
+}
+/*  Initialize the options, synchronize the variables.
+ *  This is sent by *tex.web before any TeX macro is used.
+ *  */
+void synctexinitcommand(void)
+{
+#   if SYNCTEX_DEBUG
+    printf("\nSynchronize DEBUG: synctexinitcommand\n");
+#   endif
+    _synctex_read_command_line_option();
     return;
 }
 
@@ -582,7 +595,7 @@
 #   if SYNCTEX_DEBUG
     printf("\nwarning: Synchronize DEBUG: synctex_dot_open\n");
     printf("\nwarning: SYNCTEX_VALUE=%0X\n", SYNCTEX_VALUE);
-    printf("\nwarning: synctex_options=%0X\n", synctex_options);
+    printf("\nwarning: synctex_options=%0X\n", synctex_ctxt.options);
 #   endif
     if (SYNCTEX_IS_OFF || !SYNCTEX_VALUE) {
         return NULL;            /*  synchronization is disabled: do nothing  */
@@ -590,18 +603,7 @@
     if (SYNCTEX_FILE) {
         return SYNCTEX_FILE;    /*  synchronization is already enabled  */
     }
-    if (synctex_options < 0) {
-        SYNCTEX_NO_GZ = SYNCTEX_YES;
-        synctex_ctxt.options = -synctex_options;
-    } else if (synctex_options == 0) {
-        /*  \synctex=0 was given: SyncTeX must be definitely disabled,
-         *  any subsequent \synctex=N will have no effect at all */
-        SYNCTEX_IS_OFF = SYNCTEX_YES;
-        SYNCTEX_VALUE = 0;
-   } else {
-        SYNCTEX_NO_GZ = SYNCTEX_NO;
-        synctex_ctxt.options =  synctex_options;
-    }
+    _synctex_read_command_line_option();
 #   if SYNCTEX_DEBUG
     printf("\nwarning: Synchronize DEBUG: synctex_dot_open 1\n");
 #   endif
@@ -741,12 +743,14 @@
 {
     static unsigned int synctex_tag_counter = 0;
     
+    _synctex_read_command_line_option();
+
     SYNCTEX_RETURN_IF_DISABLED;
 #   if SYNCTEX_DEBUG
     printf("\nwarning: Synchronize DEBUG: synctexstartinput %i",
            synctex_tag_counter);
     printf("\nwarning: SYNCTEX_VALUE=%i", SYNCTEX_VALUE);
-    printf("\nwarning: synctex_options=%0X", synctex_options);
+    printf("\nwarning: synctex_options=%0X\n", synctex_ctxt.options);
 #   endif
 
     if (SYNCTEX_IS_OFF) {
@@ -796,7 +800,10 @@
 #else
         char *tmp = SYNCTEX_GET_CURRENT_NAME();
 #endif
-        /* Always record the input, even if SYNCTEX_VALUE is 0 */
+        /*  Always record the input, even if SYNCTEX_VALUE is 0.
+         *  It may happen when \synctex=0 was given temporarily
+         *  in the source file.
+         */
         synctex_record_input(SYNCTEX_CURRENT_TAG,tmp);
         SYNCTEX_FREE(tmp);
     }
@@ -1045,18 +1052,18 @@
  *  details in the implementation of the functions below.  */
 #   define SYNCTEX_IGNORE(NODE) SYNCTEX_IS_OFF || !SYNCTEX_VALUE || !SYNCTEX_FILE || (synctex_ctxt.form_depth>0 && !SYNCTEX_WITH_FORMS)
 #define SYNCTEX_RECORD_LEN_OR_RETURN_ERR do {\
-if (len > 0) {\
-synctex_ctxt.total_length += len;\
-++synctex_ctxt.count;\
-} else {\
-return -1;\
-} } while(false)
+    if (len > 0) {\
+        synctex_ctxt.total_length += len;\
+        ++synctex_ctxt.count;\
+    } else {\
+        return -1;\
+    } } while(false)
 #define SYNCTEX_RECORD_LEN_AND_RETURN_NOERR do {\
-if (len > 0) {\
-synctex_ctxt.total_length += len;\
-++synctex_ctxt.count;\
-return SYNCTEX_NOERR;\
-} } while(false)
+    if (len > 0) {\
+        synctex_ctxt.total_length += len;\
+        ++synctex_ctxt.count;\
+        return SYNCTEX_NOERR;\
+    } } while(false)
 
 /*  Recording a "}..." or a ">" line  */
 static inline int synctex_record_teehs(integer sheet)
@@ -1118,7 +1125,9 @@
 #   if SYNCTEX_DEBUG
     printf("\nSynchronize DEBUG: synctexmrofxfdp\n");
 #   endif
-    synctex_record_mrofxfdp();
+    if (SYNCTEX_FILE) {
+        synctex_record_mrofxfdp();
+    }
 #   if SYNCTEX_DEBUG
     printf("\nSynchronize DEBUG: synctexmrofxfdp END\n");
 #   endif
@@ -1135,7 +1144,7 @@
 #   if SYNCTEX_DEBUG
     printf("\nSynchronize DEBUG: synctexpdfrefxform\n");
 #   endif
-    if (SYNCTEX_WITH_FORMS) {
+    if (SYNCTEX_FILE) {
         synctex_record_node_pdfrefxform(objnum);
     }
 #   if SYNCTEX_DEBUG
@@ -1694,8 +1703,13 @@
     int len = 0;
 #   if SYNCTEX_DEBUG > 999
     printf("\nSynchronize DEBUG: synctex_record_anchor\n");
+    printf("\nSYNCTEX_FILE:%p\n",SYNCTEX_FILE);
+    printf("\ntotal_length:%i\n",synctex_ctxt.total_length);
 #   endif
     len = SYNCTEX_fprintf(SYNCTEX_FILE, "!%i\n", synctex_ctxt.total_length);
+#   if SYNCTEX_DEBUG > 999
+    printf("\nSynchronize DEBUG: synctex_record_anchor 1\n");
+#   endif
     if (len > 0) {
         synctex_ctxt.total_length = len;
         ++synctex_ctxt.count;



More information about the tex-live-commits mailing list