Index: src/process-manager/cmsg.cc |
=================================================================== |
--- a/src/process-manager/cmsg.cc |
+++ b/src/process-manager/cmsg.cc |
@@ -28,6 +28,30 @@ |
m_len -= cmsglen; |
} |
+ |
+int |
+Cmsg::GetNext(int *level, int *type, int *len, uint8_t **buffer) |
+{ |
+ struct cmsghdr *cm = NULL; |
+ |
+ if (m_len < (int)CMSG_LEN(0)) |
+ return -1; |
+ |
+ cm = (struct cmsghdr *)m_current; |
+ if (cm->cmsg_len == 0 || (int)cm->cmsg_len > m_len) |
+ return -(1); |
+ |
+ *level = cm->cmsg_level; |
+ *type = cm->cmsg_type; |
+ *len = cm->cmsg_len - CMSG_LEN(0); |
+ *buffer = CMSG_DATA(cm); |
+ |
+ m_current += CMSG_ALIGN(cm->cmsg_len); |
+ m_len -= CMSG_ALIGN(cm->cmsg_len); |
+ |
+ return 0; |
+} |
+ |
void |
Cmsg::Finish (void) |
{ |