summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/gsm/files/fix-mlbuf.patch50
-rw-r--r--packages/gsm/libgsmd_svn.bb10
2 files changed, 60 insertions, 0 deletions
diff --git a/packages/gsm/files/fix-mlbuf.patch b/packages/gsm/files/fix-mlbuf.patch
new file mode 100644
index 0000000000..ed4aa2519d
--- /dev/null
+++ b/packages/gsm/files/fix-mlbuf.patch
@@ -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;
+ }
+
diff --git a/packages/gsm/libgsmd_svn.bb b/packages/gsm/libgsmd_svn.bb
index c715092b8d..4f6fe12766 100644
--- a/packages/gsm/libgsmd_svn.bb
+++ b/packages/gsm/libgsmd_svn.bb
@@ -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 \