libgsmd: band-aid. stage common/linux_list.h and fix up the mlbuf
authorPhilipp Zabel <philipp.zabel@gmail.com>
Mon, 20 Aug 2007 17:45:29 +0000 (17:45 +0000)
committerPhilipp Zabel <philipp.zabel@gmail.com>
Mon, 20 Aug 2007 17:45:29 +0000 (17:45 +0000)
changes until this is repaired upstream

packages/gsm/files/fix-mlbuf.patch [new file with mode: 0644]
packages/gsm/libgsmd_svn.bb

diff --git a/packages/gsm/files/fix-mlbuf.patch b/packages/gsm/files/fix-mlbuf.patch
new file mode 100644 (file)
index 0000000..ed4aa25
--- /dev/null
@@ -0,0 +1,50 @@
+Index: gsm/src/gsmd/atcmd.c
+===================================================================
+--- gsm/src/gsmd/atcmd.c       (revision 2745)
++++ gsm/src/gsmd/atcmd.c       (working copy)
+@@ -370,8 +370,8 @@
+       if (g->mlbuf_len)
+               g->mlbuf[g->mlbuf_len ++] = '\n';
+       DEBUGP("Appending buf to mlbuf\n");
+-      if (len > sizeof(g->mlbuf) - g->mlbuf_len)
+-              len = sizeof(g->mlbuf) - g->mlbuf_len;
++      if (len > MLPARSE_BUF_SIZE - g->mlbuf_len)
++              len = MLPARSE_BUF_SIZE - g->mlbuf_len;
+       memcpy(g->mlbuf + g->mlbuf_len, buf, len);
+       g->mlbuf_len += len;
+@@ -470,7 +470,7 @@
+                       if (cr)
+                               len = cr - pos->cur;
+                       else
+-                              len = pos->buflen;
++                              len = pos->buflen - 1;  /* assuming zero-terminated strings */
+                       rc = write(fd, pos->cur, len);
+                       if (rc == 0) {
+                               gsmd_log(GSMD_ERROR, "write returns 0, aborting\n");
+@@ -480,8 +480,8 @@
+                                       fd, rc);
+                               return rc;
+                       }
+-                      if (cr && rc == len)
+-                              rc ++;  /* Skip the \n */
++                      if (!cr || rc == len)
++                              rc ++;  /* Skip the \n or \0 */
+                       pos->buflen -= rc;
+                       pos->cur += rc;
+                       write(fd, "\r", 1);
+Index: gsm/src/gsmd/gsmd.c
+===================================================================
+--- gsm/src/gsmd/gsmd.c        (revision 2745)
++++ gsm/src/gsmd/gsmd.c        (working copy)
+@@ -301,6 +301,10 @@
+ {
+       INIT_LLIST_HEAD(&g->users);
++      g->mlbuf = talloc_array(gsmd_tallocs, unsigned char, MLPARSE_BUF_SIZE);
++      if (!g->mlbuf)
++              return -ENOMEM;
++
+       return 0;
+ }
index c715092..4f6fe12 100644 (file)
@@ -9,6 +9,7 @@ PR = "r19"
 SRC_URI_OVERRIDES_PACKAGE_ARCH = "1"
 
 SRC_URI = "svn://svn.openmoko.org/trunk/src/target;module=gsm;proto=http \
+           file://fix-mlbuf.patch;patch=1 \
            file://gsmd \
            file://default"
 S = "${WORKDIR}/gsm"
@@ -27,6 +28,15 @@ do_install_append() {
        install -m 0755 ${WORKDIR}/gsmd ${D}/${sysconfdir}/init.d/
        install -d ${D}/${sysconfdir}/default
        install ${WORKDIR}/default ${D}/${sysconfdir}/default/gsmd
+       # band-aid:
+       install -d ${D}${includedir}/common
+       install -m 0644 ${S}/include/common/linux_list.h ${D}${includedir}/common
+}
+
+# band-aid:
+do_stage_append () {
+       install -d ${STAGING_INCDIR}/common
+       install ${S}/include/common/linux_list.h ${STAGING_INCDIR}/common
 }
 
 PACKAGES =+ "${PN}-tools gsmd gsmd-plugins \