2008-02-15 Marcus Brinkmann <marcus@g10code.de>
authorMarcus Brinkmann <mb@g10code.com>
Fri, 15 Feb 2008 23:07:29 +0000 (23:07 +0000)
committerMarcus Brinkmann <mb@g10code.com>
Fri, 15 Feb 2008 23:07:29 +0000 (23:07 +0000)
        * engine-gpgconf.c (gpgconf_read): Fix end-of-line handline.

gpgme/ChangeLog
gpgme/engine-gpgconf.c

index 9ac1f61f3ea56a5e4e8c683fb76dd17b30c9354b..2a5c7191f03d25ca8575daeb332b4bc572fa54a8 100644 (file)
@@ -1,3 +1,7 @@
+2008-02-15  Marcus Brinkmann  <marcus@g10code.de>
+
+       * engine-gpgconf.c (gpgconf_read): Fix end-of-line handline.
+
 2008-02-14  Werner Koch  <wk@g10code.com>
 
        * w32-io.c (_gpgme_io_spawn): Add arg R_PID to return the pid.
index 26cd45f41e9e3d4c8e2f221b3201ef592ca0c0b2..ab03e9d7fdb8fbc4d9a94b2eac99ffcbad6a4e9a 100644 (file)
@@ -232,24 +232,24 @@ gpgconf_read (void *engine, char *arg1, char *arg2,
       nread = _gpgme_io_read (rp[0], &line[linelen], LINELENGTH - linelen - 1);
       if (nread > 0)
        {
-         line[linelen + nread] = '\0';
          linelen += nread;
+         line[linelen] = '\0';
 
          while ((mark = strchr (line, '\n')))
            {
              char *eol = mark;
              
-             if (eol > &line[0] && *eol == '\r')
+             if (eol > line && eol[-1] == '\r')
                eol--;
              *eol = '\0';
-             
+
              /* Got a full line.  */
              err = (*cb) (hook, line);
              if (err)
                break;
              
-             linelen -= mark - line;
-             memmove (line, eol + 1, linelen);
+             linelen -= mark + 1 - line;
+             memmove (line, mark + 1, linelen);
            }
        }
     }