Add XenSource vendor support to sys_info api
This commit is contained in:
		
							parent
							
								
									07c0cb7ff0
								
							
						
					
					
						commit
						9966f219e9
					
				@ -1,3 +1,7 @@
 | 
				
			|||||||
 | 
					2007-01-09  Doug MacEachern  <dougm@hyperic.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        * Add XenSource vendor support to sys_info api
 | 
				
			||||||
 | 
					
 | 
				
			||||||
2006-12-10  Doug MacEachern  <dougm@hyperic.com>
 | 
					2006-12-10  Doug MacEachern  <dougm@hyperic.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        * 1.3 released
 | 
					        * 1.3 released
 | 
				
			||||||
 | 
				
			|||||||
@ -2165,7 +2165,10 @@ static void redhat_vendor_parse(char *line, sigar_sys_info_t *info)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void lsb_vendor_parse(char *data, sigar_sys_info_t *info)
 | 
					#define is_quote(c) ((c == '\'') || (c == '"')) 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void kv_parse(char *data, sigar_sys_info_t *info,
 | 
				
			||||||
 | 
					                     void (*func)(sigar_sys_info_t *, char *, char *))
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    char *ptr = data;
 | 
					    char *ptr = data;
 | 
				
			||||||
    int len = strlen(data);
 | 
					    int len = strlen(data);
 | 
				
			||||||
@ -2188,7 +2191,22 @@ static void lsb_vendor_parse(char *data, sigar_sys_info_t *info)
 | 
				
			|||||||
            *ix = '\0';
 | 
					            *ix = '\0';
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        vlen = strlen(val);
 | 
					        vlen = strlen(val);
 | 
				
			||||||
 | 
					        if (is_quote(*val)) {
 | 
				
			||||||
 | 
					            if (is_quote(val[vlen-1])) {
 | 
				
			||||||
 | 
					                val[vlen-1] =  '\0';
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            ++val;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        func(info, key, val);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ptr += (klen + 1 + vlen + 1);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void lsb_parse(sigar_sys_info_t *info,
 | 
				
			||||||
 | 
					                      char *key, char *val)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
    if (strEQ(key, "DISTRIB_ID")) {
 | 
					    if (strEQ(key, "DISTRIB_ID")) {
 | 
				
			||||||
        SIGAR_SSTRCPY(info->vendor, val);
 | 
					        SIGAR_SSTRCPY(info->vendor, val);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -2198,9 +2216,32 @@ static void lsb_vendor_parse(char *data, sigar_sys_info_t *info)
 | 
				
			|||||||
    else if (strEQ(key, "DISTRIB_CODENAME")) {
 | 
					    else if (strEQ(key, "DISTRIB_CODENAME")) {
 | 
				
			||||||
        SIGAR_SSTRCPY(info->vendor_code_name, val);
 | 
					        SIGAR_SSTRCPY(info->vendor_code_name, val);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
        ptr += (klen + 1 + vlen + 1);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void lsb_vendor_parse(char *data, sigar_sys_info_t *info)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    kv_parse(data, info, lsb_parse);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void xen_parse(sigar_sys_info_t *info,
 | 
				
			||||||
 | 
					                      char *key, char *val)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (strEQ(key, "PRODUCT_VERSION")) {
 | 
				
			||||||
 | 
					        SIGAR_SSTRCPY(info->vendor_version, val);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else if (strEQ(key, "KERNEL_VERSION")) {
 | 
				
			||||||
 | 
					        SIGAR_SSTRCPY(info->version, val);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void xen_vendor_parse(char *data, sigar_sys_info_t *info)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    kv_parse(data, info, xen_parse);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    snprintf(info->description,
 | 
				
			||||||
 | 
					             sizeof(info->description),
 | 
				
			||||||
 | 
					             "XenServer %s",
 | 
				
			||||||
 | 
					             info->vendor_version);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct {
 | 
					typedef struct {
 | 
				
			||||||
@ -2216,6 +2257,7 @@ static linux_vendor_info_t linux_vendors[] = {
 | 
				
			|||||||
    { "Slackware", "/etc/slackware-version", NULL },
 | 
					    { "Slackware", "/etc/slackware-version", NULL },
 | 
				
			||||||
    { "Mandrake",  "/etc/mandrake-release", NULL },
 | 
					    { "Mandrake",  "/etc/mandrake-release", NULL },
 | 
				
			||||||
    { "VMware",    "/proc/vmware/version", NULL },
 | 
					    { "VMware",    "/proc/vmware/version", NULL },
 | 
				
			||||||
 | 
					    { "XenSource", "/etc/xensource-inventory", xen_vendor_parse },
 | 
				
			||||||
    { "Red Hat",   "/etc/redhat-release", redhat_vendor_parse },
 | 
					    { "Red Hat",   "/etc/redhat-release", redhat_vendor_parse },
 | 
				
			||||||
    { "lsb",       "/etc/lsb-release", lsb_vendor_parse },
 | 
					    { "lsb",       "/etc/lsb-release", lsb_vendor_parse },
 | 
				
			||||||
    { "Debian",    "/etc/debian_version", NULL },
 | 
					    { "Debian",    "/etc/debian_version", NULL },
 | 
				
			||||||
@ -2268,10 +2310,12 @@ static int get_linux_vendor_info(sigar_sys_info_t *info)
 | 
				
			|||||||
        generic_vendor_parse(data, info);
 | 
					        generic_vendor_parse(data, info);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (info->description[0] == '\0') {
 | 
				
			||||||
        snprintf(info->description,
 | 
					        snprintf(info->description,
 | 
				
			||||||
                 sizeof(info->description),
 | 
					                 sizeof(info->description),
 | 
				
			||||||
                 "%s %s",
 | 
					                 "%s %s",
 | 
				
			||||||
                 info->vendor, info->vendor_version);
 | 
					                 info->vendor, info->vendor_version);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return SIGAR_OK;
 | 
					    return SIGAR_OK;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user