-@@ -213,24 +213,21 @@
- while (*q != ' ') q++;
- }
- *q++ = 0;
-- while (*q == ' ') q++;
- p->statname = (char *)xmalloc(strlen(s)+1);
- strcpy(p->statname, s);
--
-- /* This could be replaced by getsid(pid) */
-- if (sscanf(q, "%*c %*d %*d %d", &p->sid) != 1) {
-- p->sid = 0;
+ free(p);
++ fclose(fp);
+ continue;
+ }
+ s++;
+@@ -242,20 +243,23 @@
+
+ /* Get session, startcode, endcode. */
+ startcode = endcode = 0;
+- if (sscanf(q, "%*c %*d %*d %d %*d %*d %*u %*u "
++ if (sscanf(q, "%*c %*d %*d %*d %*d %*d %*u %*u "
+ "%*u %*u %*u %*u %*u %*d %*d "
+ "%*d %*d %*d %*d %*u %*u %*d "
+ "%*u %lu %lu",
+- &p->sid, &startcode, &endcode) != 3) {
++ &startcode, &endcode) == 2) {
++ if (startcode == 0 && endcode == 0)
++ p->kernel = 1;
++ }
++ fclose(fp);
++ p->sid = getsid(pid);
++ if (p->sid < 0) {
+ p->sid = 0;