[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
CVS shishi/lib
From: |
shishi-commit |
Subject: |
CVS shishi/lib |
Date: |
Thu, 02 Dec 2004 04:36:21 +0100 |
Update of /home/cvs/shishi/lib
In directory dopio:/tmp/cvs-serv2244
Modified Files:
diskio.c
Log Message:
Cleanups.
--- /home/cvs/shishi/lib/diskio.c 2004/12/02 02:37:59 1.44
+++ /home/cvs/shishi/lib/diskio.c 2004/12/02 03:36:20 1.45
@@ -141,60 +141,64 @@
FILE * fh, char *buffer, size_t len,
const char *tag)
{
- int lno = 0;
- size_t maxsize = len;
- char line[BUFSIZ];
- char armorbegin[BUFSIZ];
- char armorend[BUFSIZ];
- int in_data = 0;
+ char *line = NULL;
+ size_t linelen = 0;
+ char *armorbegin, *armorend;
+ int phase = 0;
+ int res = SHISHI_OK;
- sprintf (armorbegin, HEADERBEG, tag);
- sprintf (armorend, HEADEREND, tag);
+ armorbegin = xasprintf (HEADERBEG, tag);
+ armorend = xasprintf (HEADEREND, tag);
- len = 0;
- while (fgets (line, sizeof (line), fh))
+ while (getline (&line, &linelen, fh) > 0)
{
- lno++;
- line[sizeof (line) - 1] = '\0';
- if (!*line || line[strlen (line) - 1] != '\n')
- {
- fprintf (stderr, "input line %u too long or missing LF\n", lno);
- continue;
- }
- line[strlen (line) - 1] = '\0';
- if (VERBOSENOISE (handle))
- printf ("line %d read %d bytes: %s\n", lno, strlen (line), line);
-
- /* XXX check if all chars in line are b64 data, otherwise bail out */
+ if (line[strlen (line) - 1] == '\r')
+ line[strlen (line) - 1] = '\0';
+ if (line[strlen (line) - 1] == '\n')
+ line[strlen (line) - 1] = '\0';
- if (in_data)
+ if (phase == 1)
{
- if (strncmp (line, armorend, strlen (armorend)) == 0)
- break;
+ if (strcmp (line, armorend) == 0)
+ {
+ phase = 2;
+ break;
+ }
}
else
{
- in_data = strncmp (line, armorbegin, strlen (armorbegin)) == 0;
+ if (strcmp (line, armorbegin) == 0)
+ phase = 1;
continue;
}
- if (len + strlen (line) >= maxsize)
+ if (len <= strlen (line))
{
- shishi_error_printf (handle, "too large input size on line %d\n",
- lno);
- return !SHISHI_OK;
+ res = SHISHI_TOO_SMALL_BUFFER;
+ goto done;
}
- memcpy (buffer + len, line, strlen (line));
- len += strlen (line);
+ memcpy (buffer, line, strlen (line));
+ buffer += strlen (line);
+ len -= strlen (line);
}
- if (len <= 0)
- return !SHISHI_OK;
+ if (len == 0)
+ res = SHISHI_TOO_SMALL_BUFFER;
+ else
+ *buffer = '\0';
- buffer[len] = '\0';
+ if (phase != 2)
+ res = SHISHI_IO_ERROR;
- return SHISHI_OK;
+ done:
+
+ free (armorbegin);
+ free (armorend);
+ if (line)
+ free (line);
+
+ return res;
}
static int
@@ -217,7 +221,9 @@
return res;
}
- derlen = base64_from (&der[0], b64der);
+ derlen = sizeof (der);
+ if (!base64_decode (b64der, strlen (b64der), der, &derlen))
+ return SHISHI_BASE64_ERROR;
}
else
{
@@ -272,7 +278,9 @@
return res;
}
- derlen = base64_from (&der[0], b64der);
+ derlen = sizeof (der);
+ if (!base64_decode (b64der, strlen (b64der), der, &derlen))
+ return SHISHI_BASE64_ERROR;
}
else
{
@@ -349,7 +357,9 @@
return res;
}
- derlen = base64_from (&der[0], b64der);
+ derlen = sizeof (der);
+ if (!base64_decode (b64der, strlen (b64der), der, &derlen))
+ return SHISHI_BASE64_ERROR;
}
else
{
@@ -410,7 +420,9 @@
return res;
}
- derlen = base64_from (&der[0], b64der);
+ derlen = sizeof (der);
+ if (!base64_decode (b64der, strlen (b64der), der, &derlen))
+ return SHISHI_BASE64_ERROR;
}
else
{
@@ -470,7 +482,9 @@
return res;
}
- derlen = base64_from (&der[0], b64der);
+ derlen = sizeof (der);
+ if (!base64_decode (b64der, strlen (b64der), der, &derlen))
+ return SHISHI_BASE64_ERROR;
}
else
{
@@ -517,7 +531,9 @@
return res;
}
- derlen = base64_from (&der[0], b64der);
+ derlen = sizeof (der);
+ if (!base64_decode (b64der, strlen (b64der), der, &derlen))
+ return SHISHI_BASE64_ERROR;
}
else
{
@@ -566,7 +582,9 @@
return res;
}
- derlen = base64_from (&der[0], b64der);
+ derlen = sizeof (der);
+ if (!base64_decode (b64der, strlen (b64der), der, &derlen))
+ return SHISHI_BASE64_ERROR;
}
else
{
@@ -614,7 +632,9 @@
return res;
}
- derlen = base64_from (&der[0], b64der);
+ derlen = sizeof (der);
+ if (!base64_decode (b64der, strlen (b64der), der, &derlen))
+ return SHISHI_BASE64_ERROR;
}
else
{
@@ -662,7 +682,9 @@
return res;
}
- derlen = base64_from (&der[0], b64der);
+ derlen = sizeof (der);
+ if (!base64_decode (b64der, strlen (b64der), der, &derlen))
+ return SHISHI_BASE64_ERROR;
}
else
{
@@ -709,7 +731,9 @@
return res;
}
- derlen = base64_from (&der[0], b64der);
+ derlen = sizeof (der);
+ if (!base64_decode (b64der, strlen (b64der), der, &derlen))
+ return SHISHI_BASE64_ERROR;
}
else
{
@@ -756,7 +780,9 @@
return res;
}
- derlen = base64_from (&der[0], b64der);
+ derlen = sizeof (der);
+ if (!base64_decode (b64der, strlen (b64der), der, &derlen))
+ return SHISHI_BASE64_ERROR;
}
else
{
@@ -788,7 +814,7 @@
{
int lno = 0;
char line[BUFSIZ];
- char buffer[BUFSIZ];
+ char *b64buffer;
char armorbegin[BUFSIZ];
char armorend[BUFSIZ];
int in_key = 0, in_body = 0;
@@ -831,8 +857,10 @@
if (in_body)
{
- buflen = base64_from (buffer, line);
- shishi_key_value_set (lkey, buffer);
+ int ok = base64_decode_alloc (line, strlen (line), &b64buffer, NULL);
+ if (!ok)
+ return SHISHI_BASE64_ERROR;
+ shishi_key_value_set (lkey, b64buffer);
}
else
{
@@ -894,11 +922,14 @@
int
shishi_key_print (Shishi * handle, FILE * fh, Shishi_key * key)
{
- char b64key[BUFSIZ];
+ char *b64key;
size_t i;
- base64_to (b64key, shishi_key_value (key),
- shishi_key_length (key), sizeof (b64key));
+ base64_encode_alloc (shishi_key_value (key), shishi_key_length (key),
+ &b64key);
+
+ if (!b64key)
+ return SHISHI_MALLOC_ERROR;
fprintf (fh, HEADERBEG "\n", "KEY");
@@ -921,6 +952,8 @@
if ((i + 1) % 64 != 0)
fprintf (fh, "\n");
+ free (b64key);
+
#if 0
if (VERBOSENOISE (handle))
{
- CVS shishi/lib, shishi-commit, 2004/12/01
- CVS shishi/lib, shishi-commit, 2004/12/01
- CVS shishi/lib, shishi-commit, 2004/12/01
- CVS shishi/lib, shishi-commit, 2004/12/01
- CVS shishi/lib, shishi-commit, 2004/12/01
- CVS shishi/lib,
shishi-commit <=
- CVS shishi/lib, shishi-commit, 2004/12/01
- CVS shishi/lib, shishi-commit, 2004/12/02
- CVS shishi/lib, shishi-commit, 2004/12/02
- CVS shishi/lib, shishi-commit, 2004/12/02
- CVS shishi/lib, shishi-commit, 2004/12/02
- CVS shishi/lib, shishi-commit, 2004/12/18