aboutsummaryrefslogtreecommitdiffstats
path: root/src/m_paper_key/packets.cpp
diff options
context:
space:
mode:
authorsaturneric <[email protected]>2024-07-28 08:18:33 +0000
committersaturneric <[email protected]>2024-07-28 08:18:33 +0000
commitc27c541257585878e4db705559c5cb953dc860b7 (patch)
tree7dc69115de96151a40acfc8891bf9a065eee0a9b /src/m_paper_key/packets.cpp
parentfix: solve a memory leak issue (diff)
downloadModules-c27c541257585878e4db705559c5cb953dc860b7.tar.gz
Modules-c27c541257585878e4db705559c5cb953dc860b7.zip
feat: add pinentry module and paper key module
Diffstat (limited to 'src/m_paper_key/packets.cpp')
-rw-r--r--src/m_paper_key/packets.cpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/m_paper_key/packets.cpp b/src/m_paper_key/packets.cpp
new file mode 100644
index 0000000..5fd1f04
--- /dev/null
+++ b/src/m_paper_key/packets.cpp
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2007 David Shaw <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "packets.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "GFSDKBasic.h"
+#include "output.h"
+
+extern int verbose;
+
+auto append_packet(struct packet *packet, unsigned char *buf,
+ size_t len) -> struct packet * {
+ if (packet != nullptr) {
+ while (packet->size - packet->len < len) {
+ packet->size += 100;
+ packet->buf = static_cast<unsigned char *>(
+ GFReallocateMemory(packet->buf, packet->size));
+ }
+
+ memcpy(&packet->buf[packet->len], buf, len);
+ packet->len += len;
+ } else {
+ packet =
+ static_cast<struct packet *>(GFAllocateMemory(sizeof(struct packet)));
+ packet->type = 0;
+ packet->buf = static_cast<unsigned char *>(GFAllocateMemory(len));
+ packet->len = len;
+ packet->size = len;
+
+ memcpy(packet->buf, buf, len);
+ }
+
+ return packet;
+}
+
+void free_packet(struct packet *packet) {
+ if (packet != nullptr) {
+ GFFreeMemory(packet->buf);
+ GFFreeMemory(packet);
+ }
+} \ No newline at end of file