rpms/gtkterm/F-7 gtkterm-0.99.5-crlf.patch, NONE, 1.1 gtkterm.desktop, 1.2, 1.3 gtkterm.spec, 1.10, 1.11

Hans de Goede (jwrdegoede) fedora-extras-commits at redhat.com
Sat Jun 16 19:49:29 UTC 2007


Author: jwrdegoede

Update of /cvs/extras/rpms/gtkterm/F-7
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv25152

Modified Files:
	gtkterm.desktop gtkterm.spec 
Added Files:
	gtkterm-0.99.5-crlf.patch 
Log Message:
* Sat Jun 16 2007 Hans de Goede <j.w.r.degoede at hhs.nl> 0.99.5-4
- Fix various CR LF handling issues (bug 244182)


gtkterm-0.99.5-crlf.patch:

--- NEW FILE gtkterm-0.99.5-crlf.patch ---
--- gtkterm-0.99.5/src/buffer.c.crlf	2005-09-22 21:33:44.000000000 +0200
+++ gtkterm-0.99.5/src/buffer.c	2007-06-16 13:10:41.000000000 +0200
@@ -23,11 +23,12 @@
 #include "buffer.h"
 #include "gettext.h"
 #include "i18n.h"
+#include "serie.h"
 
 static char *buffer = NULL;
 static char *current_buffer;
 static unsigned int pointer;
-
+static int cr_received = 0;
 char overlapped;
 
 void (*write_func)(char *, unsigned int) = NULL;
@@ -54,39 +55,56 @@
 {
   char *characters;
 
-  int pos;
-  GString *buffer_tmp;
-  gchar *in_buffer;
-
-  buffer_tmp =  g_string_new(chars);
-	  
   /* If the auto CR LF mode on, read the buffer to add \r before \n */ 
 
   if(crlf_auto)
     {
-      in_buffer=buffer_tmp->str;
+      /* BUFFER_RECEPTION*2 for worst case scenario, all \n or \r chars */
+      char out_buffer[BUFFER_RECEPTION*2];
+      int i, out_size = 0;
       
-      in_buffer += size;
-      for(pos=size; pos>0; pos--)
-	{
-	  in_buffer--;
-	  
-	  if(*in_buffer=='\n' && *(in_buffer-1) != '\r') 
-	    {
-	      g_string_insert_c(buffer_tmp, pos-1, '\r');
-	      size += 1;
-	    }
-
-	  if(*in_buffer=='\r' && *(in_buffer+1) != '\n') 
-	    {
-	      g_string_insert_c(buffer_tmp, pos, '\n');
-	      size += 1;
-	    }
-	}
+      for (i=0; i<size; i++)
+        {
+          if (chars[i] == '\r')
+            {
+              /* If the previous character was a CR too, insert a newline */
+              if (cr_received)
+                {
+                   out_buffer[out_size] = '\n';
+                   out_size++;
+                }
+              cr_received = 1;
+            }
+          else
+            {
+              if (chars[i] == '\n')
+                {
+                  /* If we get a newline without a CR first, insert a CR */
+                  if (!cr_received)
+                    {
+                       out_buffer[out_size] = '\r';
+                       out_size++;
+                    }
+                }
+              else
+                {
+                  /* If we receive a normal char, and the previous one was a
+                     CR insert a newline */
+                  if (cr_received)
+                    {
+                       out_buffer[out_size] = '\n';
+                       out_size++;
+                    }
+                }
+              cr_received = 0;
+            }
+          out_buffer[out_size] = chars[i];
+          out_size++;
+        }
+      chars = out_buffer;
+      size = out_size;
     }
 
-  chars = buffer_tmp->str;
-
   if(buffer == NULL)
     {
       i18n_printf(_("ERROR : Buffer is not initialized !\n"));
@@ -157,6 +175,7 @@
   memset(buffer, 0, BUFFER_SIZE);
   current_buffer = buffer;
   pointer = 0;
+  cr_received = 0;
 }
 
 void set_clear_func(void (*func)(void))
--- gtkterm-0.99.5/src/widgets.c.crlf	2005-09-22 22:13:00.000000000 +0200
+++ gtkterm-0.99.5/src/widgets.c	2007-06-16 13:10:26.000000000 +0200
@@ -438,30 +438,7 @@
 
 void put_text(gchar *string, guint size)
 {
-  int pos;
-  GString *buffer_tmp;
-  gchar *in_buffer;
-  
-  buffer_tmp =  g_string_new(string);
-  in_buffer=buffer_tmp->str;
-
-  in_buffer += size;
-  for(pos=size; pos>0; pos--)
-    {
-      in_buffer--;
-      if(*in_buffer=='\r' && *(in_buffer+1) != '\n') 
-	{
-	  g_string_insert_c(buffer_tmp, pos, '\n');
-	  size += 1;
-	}
-      if(*in_buffer=='\n' && *(in_buffer-1) != '\r') 
-	{
-	  g_string_insert_c(buffer_tmp, pos-1, '\r');
-	  size += 1;
-	}
-    }
-
-  vte_terminal_feed(VTE_TERMINAL(display), buffer_tmp->str, size);
+  vte_terminal_feed(VTE_TERMINAL(display), string, size);
 }
 
 gint send_serial(gchar *string, gint len)
--- gtkterm-0.99.5/src/serie.c.crlf	2005-09-22 21:49:38.000000000 +0200
+++ gtkterm-0.99.5/src/serie.c	2007-06-16 13:10:26.000000000 +0200
@@ -111,8 +111,8 @@
 
 int Send_chars(char *string, int length)
 {
-  char *buffer, *start_buffer;
-  int i, size_written, buf_length;
+  char *buffer /*, *start_buffer */;
+/*  int i, size_written, buf_length; */
   int bytes_written = 0;
 
   /* Normally it never happens, but it is better not to segfault ;) */
@@ -120,8 +120,11 @@
     return 0;
 
   buffer=string;
+  
+  /* HDG <j.w.r.degoede at hhs.nl> this is non sense, when sending enter it
+     should be just '\r' and not "\r\n", disabling */
 
-  if(config.crlfauto)
+/*  if(config.crlfauto)
     {
       if(length == 1)
 	{
@@ -184,7 +187,7 @@
 	    bytes_written += write(serial_port_fd, "\n", 1);
 	}
     }
-  else
+  else */
     {
       bytes_written = write(serial_port_fd, buffer, length);
     }


Index: gtkterm.desktop
===================================================================
RCS file: /cvs/extras/rpms/gtkterm/F-7/gtkterm.desktop,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- gtkterm.desktop	31 Mar 2006 20:44:46 -0000	1.2
+++ gtkterm.desktop	16 Jun 2007 19:48:54 -0000	1.3
@@ -8,5 +8,4 @@
 Terminal=false
 StartupNotify=false
 Type=Application
-Categories=Application;Utility;
-Version=0.99.5
+Categories=Utility;


Index: gtkterm.spec
===================================================================
RCS file: /cvs/extras/rpms/gtkterm/F-7/gtkterm.spec,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- gtkterm.spec	28 Aug 2006 11:34:55 -0000	1.10
+++ gtkterm.spec	16 Jun 2007 19:48:54 -0000	1.11
@@ -1,6 +1,6 @@
 Name:           gtkterm
 Version:        0.99.5
-Release:        3%{?dist}
+Release:        4%{?dist}
 Summary:        Serial port terminal
 Group:          Applications/Communications
 License:        GPL
@@ -9,9 +9,11 @@
 Source1:        gtkterm.desktop
 Source2:        gtkterm.png
 Patch0:         gtkterm-0.99.5-fixes.patch
+Patch1:         gtkterm-0.99.5-crlf.patch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 BuildRequires:  gtk2-devel gettext bison desktop-file-utils vte-devel
 BuildRequires:  zlib-devel ncurses-devel
+Requires:       hicolor-icon-theme
 
 %description
 Simple GUI terminal used to communicate with the serial port.
@@ -21,6 +23,7 @@
 %prep
 %setup -q
 %patch0 -p1
+%patch1 -p1 -z .crlf
 
 
 %build
@@ -36,7 +39,6 @@
 mkdir $RPM_BUILD_ROOT%{_datadir}/applications
 desktop-file-install --vendor fedora            \
   --dir $RPM_BUILD_ROOT%{_datadir}/applications \
-  --add-category X-Fedora                       \
   %{SOURCE1}
 mkdir -p $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/48x48/apps
 install -p -m 644 %{SOURCE2} \
@@ -51,15 +53,11 @@
 
 %post
 touch --no-create %{_datadir}/icons/hicolor || :
-if [ -x %{_bindir}/gtk-update-icon-cache ]; then
-   %{_bindir}/gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor || :
-fi
+%{_bindir}/gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor || :
 
 %postun
 touch --no-create %{_datadir}/icons/hicolor || :
-if [ -x %{_bindir}/gtk-update-icon-cache ]; then
-   %{_bindir}/gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor || :
-fi
+%{_bindir}/gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor || :
 
 
 %files -f %{name}.lang
@@ -72,6 +70,9 @@
 
 
 %changelog
+* Sat Jun 16 2007 Hans de Goede <j.w.r.degoede at hhs.nl> 0.99.5-4
+- Fix various CR LF handling issues (bug 244182)
+
 * Mon Aug 28 2006 Hans de Goede <j.w.r.degoede at hhs.nl> 0.99.5-3
 - FE6 Rebuild
 




More information about the fedora-extras-commits mailing list