|
@@ -55,7 +55,7 @@ static void __init find_tempdir(void)
|
|
|
*/
|
|
|
static int next(int fd, char *buf, int size, char c)
|
|
|
{
|
|
|
- int n;
|
|
|
+ int n, len;
|
|
|
char *ptr;
|
|
|
|
|
|
while((ptr = strchr(buf, c)) == NULL){
|
|
@@ -69,7 +69,17 @@ static int next(int fd, char *buf, int size, char c)
|
|
|
}
|
|
|
|
|
|
ptr++;
|
|
|
- memmove(buf, ptr, strlen(ptr) + 1);
|
|
|
+ len = strlen(ptr);
|
|
|
+ memmove(buf, ptr, len + 1);
|
|
|
+
|
|
|
+ /* Refill the buffer so that if there's a partial string that we care
|
|
|
+ * about, it will be completed, and we can recognize it.
|
|
|
+ */
|
|
|
+ n = read(fd, &buf[len], size - len - 1);
|
|
|
+ if(n < 0)
|
|
|
+ return -errno;
|
|
|
+
|
|
|
+ buf[len + n] = '\0';
|
|
|
return 1;
|
|
|
}
|
|
|
|