aboutsummaryrefslogtreecommitdiff
path: root/src/client/linux/handler/minidump_generator.cc
diff options
context:
space:
mode:
authorted.mielczarek <ted.mielczarek@4c0a9323-5329-0410-9bdc-e9ce6186880e>2007-05-31 20:28:43 +0000
committerted.mielczarek <ted.mielczarek@4c0a9323-5329-0410-9bdc-e9ce6186880e>2007-05-31 20:28:43 +0000
commitf68536ae50c780ecc12e1a334cf972c538ba2414 (patch)
treed6792fb57ba9bdde468a3c13305738016ad968fe /src/client/linux/handler/minidump_generator.cc
parentC++ file gets a C++ comment (diff)
downloadbreakpad-f68536ae50c780ecc12e1a334cf972c538ba2414.tar.xz
Issue 169 - Fill in CPU vendor id in MDRawSystemInfo in Linux minidump_generator. r=Liu Li
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@185 4c0a9323-5329-0410-9bdc-e9ce6186880e
Diffstat (limited to 'src/client/linux/handler/minidump_generator.cc')
-rw-r--r--src/client/linux/handler/minidump_generator.cc31
1 files changed, 30 insertions, 1 deletions
diff --git a/src/client/linux/handler/minidump_generator.cc b/src/client/linux/handler/minidump_generator.cc
index a7ba3e80..b212d44f 100644
--- a/src/client/linux/handler/minidump_generator.cc
+++ b/src/client/linux/handler/minidump_generator.cc
@@ -328,6 +328,9 @@ bool WriteThreadStream(MinidumpFileWriter *minidump_writer,
bool WriteCPUInformation(MDRawSystemInfo *sys_info) {
const char *proc_cpu_path = "/proc/cpuinfo";
char line[128];
+ char vendor_id[13];
+ const char vendor_id_name[] = "vendor_id";
+ const size_t vendor_id_name_length = sizeof(vendor_id_name) - 1;
struct CpuInfoEntry {
const char *info_name;
@@ -340,6 +343,8 @@ bool WriteCPUInformation(MDRawSystemInfo *sys_info) {
{ NULL, -1 },
};
+ memset(vendor_id, 0, sizeof(vendor_id));
+
FILE *fp = fopen(proc_cpu_path, "r");
if (fp != NULL) {
while (fgets(line, sizeof(line), fp)) {
@@ -353,6 +358,26 @@ bool WriteCPUInformation(MDRawSystemInfo *sys_info) {
}
entry++;
}
+
+ // special case for vendor_id
+ if (!strncmp(line, vendor_id_name, vendor_id_name_length)) {
+ char *value = strchr(line, ':');
+ if (value == NULL)
+ continue;
+
+ value++;
+ while (*value && isspace(*value))
+ value++;
+ if (*value) {
+ size_t length = strlen(value);
+ // we don't want the trailing newline
+ if (value[length - 1] == '\n')
+ length--;
+ // ensure we have space for the value
+ if (length < sizeof(vendor_id))
+ strncpy(vendor_id, value, length);
+ }
+ }
}
fclose(fp);
}
@@ -373,8 +398,12 @@ bool WriteCPUInformation(MDRawSystemInfo *sys_info) {
(strlen(uts.machine) == 4 &&
uts.machine[0] == 'i' &&
uts.machine[2] == '8' &&
- uts.machine[3] == '6'))
+ uts.machine[3] == '6')) {
sys_info->processor_architecture = MD_CPU_ARCHITECTURE_X86;
+ if (vendor_id[0] != '\0')
+ memcpy(sys_info->cpu.x86_cpu_info.vendor_id, vendor_id,
+ sizeof(sys_info->cpu.x86_cpu_info.vendor_id));
+ }
}
return true;
}