00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifdef HAVE_CONFIG_H
00025 # include <config.h>
00026 #endif
00027
00028 #include <gnome.h>
00029 #include <stdio.h>
00030 #include <string.h>
00031 #include <dirent.h>
00032 #include <sys/types.h>
00033 #include <stdlib.h>
00034 #include <glib.h>
00035
00036 #include "lininfo.h"
00037 #include "others.h"
00038
00043 int get_cpu_info (struct cpu_info *cpu)
00044 {
00045 gchar* contents;
00046 char* str;
00047
00048 if(g_file_get_contents(CPU_FILE,&contents,NULL,NULL)==FALSE)
00049
00050 g_error("Can't read %s file",CPU_FILE);
00051
00052 str=contents;
00053 find_data_for("processor : %[^\n]",cpu->processor,str);
00054 find_data_for("vendor_id : %[^\n]",cpu->vendor_id,str);
00055 find_data_for("cpu family : %[^\n]",cpu->cpu_family,str);
00056 find_data_for("model : %[^\n]",cpu->model,str);
00057 find_data_for("model name : %[^\n]",cpu->model_name,str) ;
00058 find_data_for("stepping : %[^\n]",cpu->stepping,str);
00059 find_data_for("cpu MHz : %[^\n]",cpu->Mhz,str);
00060 find_data_for("cache size : %[^\n]",cpu->cache,str);
00061 find_data_for("fpu : %[^\n]",cpu->fpu,str);
00062 find_data_for("fpu_exception : %[^\n]",cpu->fpu_exception,str);
00063 find_data_for("cpuid level : %[^\n]",cpu->cpuid_level,str);
00064 find_data_for("wp : %[^\n]",cpu->wp,str);
00065 find_data_for("flags : %[^\n]",cpu->flags,str);
00066 find_data_for("bogomips : %[^\n]",cpu->bogomips,str);
00067
00068 g_free(contents);
00069
00070 return (0);
00071 }
00072
00077 int get_mhz_info(char *mhz)
00078 {
00079 gchar *contents;
00080
00081 if(g_file_get_contents(CPU_FILE,&contents,NULL,NULL)==FALSE){
00082
00083 g_error("Can't read %s file",CPU_FILE);
00084 return -1;
00085 }
00086
00087 find_data_for("cpu MHz : %[^\n]",mhz,contents);
00088
00089 g_free(contents);
00090
00091 return(0);
00092 }
00093
00094
00099 int get_mem_info (struct mem_info *mem)
00100 {
00101 gchar* contents;
00102
00103 if(g_file_get_contents(MEM_FILE,&contents,NULL,NULL)==FALSE)
00104
00105 g_error("Can't read %s file",MEM_FILE);
00106
00107 find_data_for ("MemTotal: %[^\n]",mem->total, contents);
00108 find_data_for ("MemFree: %[^\n]",mem->free, contents);
00109 find_data_for ("Buffers: %[^\n]",mem->buffers, contents);
00110 find_data_for ("Cached: %[^\n]",mem->cached, contents);
00111 find_data_for ("SwapCached: %[^\n]",mem->swap_cached, contents);
00112 find_data_for ("Active: %[^\n]",mem->active, contents);
00113 find_data_for ("Inactive: %[^\n]",mem->inactive,contents);
00114 find_data_for ("Dirty: %[^\n]",mem->dirty, contents);
00115 find_data_for ("HighTotal: %[^\n]",mem->high_total, contents);
00116 find_data_for ("HighFree: %[^\n]",mem->high_free, contents);
00117 find_data_for ("LowTotal: %[^\n]",mem->low_total, contents);
00118 find_data_for ("LowFree: %[^\n]",mem->low_free, contents);
00119 find_data_for ("SwapTotal: %[^\n]",mem->swap_total, contents);
00120 find_data_for ("SwapFree: %[^\n]",mem->swap_free, contents);
00121 find_data_for ("HugePages_Total: %[^\n]",mem->hugepages_total, contents);
00122 find_data_for ("HugePages_Free: %[^\n]",mem->hugepages_free, contents);
00123 find_data_for ("Hugepagesize: %[^\n]",mem->hugepages_size, contents);
00124
00125 g_free(contents);
00126
00127 return (0);
00128 }
00129
00130
00135 int get_devs_info(struct dev_info *devs)
00136 {
00137 gchar *contents;
00138 gsize tam;
00139 char *p;
00140
00141 if(g_file_get_contents(DEV_FILE,&contents,&tam,NULL)==FALSE){
00142
00143 g_critical("Can't read %s file",DEV_FILE);
00144 return -1;
00145 }
00146
00147 p=strstr(contents,"Block devices:");
00148 *p='\0';
00149 p=skip_lines(p,1);
00150 devs->blocks=g_string_new((gchar*) p);
00151 p=skip_lines(contents,1);
00152 devs->characters=g_string_new(p);
00153
00154 g_free(contents);
00155
00156 return(0);
00157 }
00158
00163 int get_settings_info(struct settings_info *settings)
00164 {
00165 gchar *unk_string=_("Unknown");
00166 gchar *contents;
00167 int ret = 0;
00168
00169 if(g_file_get_contents(HOST_NAME,&contents,NULL,NULL)==FALSE){
00170 g_warning("Failed to read %s file\n",HOST_NAME);
00171 settings->host=g_string_new(unk_string);
00172 g_free(contents);
00173 ret = -1;
00174 }else{
00175 settings->host=g_string_new(contents);
00176 g_free(contents);
00177 }
00178
00179 if(g_file_get_contents(DOMAIN_NAME,&contents,NULL,NULL)==FALSE){
00180 settings->domain=g_string_new(unk_string);
00181 g_warning("Failed to read %s file\n",DOMAIN_NAME);
00182 g_free(contents);
00183 ret = -1;
00184 }else{
00185 settings->domain=g_string_new(contents);
00186 g_free(contents);
00187 }
00188
00189
00190 read_values_from_file(3,FILES,&settings->fdasig,&settings->fdfreed,\
00191 &settings->fdmax);
00192 read_values_from_file(1,THREADS_MAX,&settings->threads);
00193 read_values_from_file(1,P_MAX_Q,&settings->posix_mq);
00194 read_values_from_file(1,P_MAX_M,&settings->posix_mpq);
00195 read_values_from_file(1,P_MAX_S,&settings->posix_ms);
00196 read_values_from_file(2,INODES,&settings->inmax,&settings->inasig);
00197 read_values_from_file(1,PAGE_MAX,&settings->page_max);
00198 read_values_from_file(1,SEG_MAX,&settings->seg_max);
00199 read_values_from_file(1,SEG_SIZE,&settings->seg_size);
00200 read_values_from_file(4,SEM,&settings->max_seminset, &settings->max_semsys,\
00201 &settings->max_opcall, &settings->max_semsets);
00202
00203
00204
00205 return(ret);
00206 }
00207
00212 int get_stats_info (struct stats_info *stats)
00213 {
00214 gchar *contents;
00215 gchar str[50];
00216
00217 if(g_file_get_contents(STATS_FILE,&contents,NULL,NULL)==FALSE){
00218
00219 g_warning("Failed to read %s file",STATS_FILE);
00220 g_free(contents);
00221 stats->cpu=g_string_new(_("Unknown"));
00222 return -1;
00223 }else{
00224 find_data_for ("cpu %[^\n]",str, contents);
00225 stats->cpu=g_string_new(str);
00226 find_data_for ("cpu0 %[^\n]",str, contents);
00227 stats->cpu0=g_string_new(str);
00228 find_data_for ("cpu1 %[^\n]",str, contents);
00229 stats->cpu1=g_string_new(str);
00230 find_data_for ("ctxt %[^\n]",str, contents);
00231 stats->ctxt=g_string_new(str);
00232 }
00233
00234 g_free(contents);
00235
00236 return (0);
00237 }
00238
00239
00245 int get_battery_info(struct battery_info *battery,const char *file)
00246 {
00247 #define TAM 10
00248 gchar *contents;
00249 gchar *unk_string=_("Unknown");
00250 int ret=0;
00251 gchar data[TAM];
00252 gchar dest[TAM];
00253
00254 if(g_file_get_contents(file,&contents,NULL,NULL)==FALSE){
00255 battery->cap=g_string_new(unk_string);
00256 battery->last_cap=g_string_new(unk_string);
00257 battery->type=g_string_new(unk_string);
00258 battery->cap_warning=g_string_new(unk_string);
00259 battery->cap_low=g_string_new(unk_string);
00260
00261 g_free(contents);
00262 g_warning("Failed to read %s file\n",file);
00263 ret=-1;
00264 }else{
00265 strncpy(data,parse_batt("design capacity",contents,dest),TAM);
00266 battery->cap=g_string_new(data);
00267 strncpy(data,parse_batt("last full capacity",contents,dest),TAM);
00268 battery->last_cap=g_string_new(data);
00269 strncpy(data,parse_batt("design capacity warning",contents,dest),TAM);
00270 battery->cap_warning=g_string_new(data);
00271 strncpy(data,parse_batt("design capacity low",contents,dest),TAM);
00272 battery->cap_low=g_string_new(data);
00273 strncpy(data,parse_batt("battery type",contents,dest),TAM);
00274 battery->type=g_string_new(data);
00275 }
00276
00277 g_free(contents);
00278 return ret;
00279 }
00280
00285 int get_acpi_info(struct acpi_info *acpi)
00286 {
00287 #define TAM 10
00288 gchar *contents;
00289 int ret=0;
00290 gchar data[TAM];
00291 gchar dest[TAM];
00292
00293
00294 if(g_file_get_contents(BATT_STATE,&contents,NULL,NULL)==FALSE){
00295 acpi->battery.rem=g_string_new("");
00296 g_free(contents);
00297 g_warning("Failed to read %s file\n",BATT_STATE);
00298
00299
00300 if(g_file_get_contents(BATT_STATE1,&contents,NULL,NULL)==FALSE){
00301 g_warning("Failed to read %s file\n",BATT_STATE1);
00302 g_free(contents);
00303 ret=-1;
00304 }else{
00305 strncpy(data,parse_batt("remaining capacity",contents,dest),TAM);
00306 g_free(contents);
00307 g_string_append(acpi->battery.rem,data);
00308 }
00309
00310
00311 }else{
00312 strncpy(data,parse_batt("remaining capacity",contents,dest),TAM);
00313 g_free(contents);
00314 acpi->battery.rem=g_string_new(data);
00315 }
00316
00317
00318 if(g_file_get_contents(TEMPERATURE,&contents,NULL,NULL)==FALSE){
00319 acpi->temp=g_string_new("");
00320 g_warning("Failed to read %s file\n",TEMPERATURE);
00321 g_free(contents);
00322 ret=-1;
00323 }else{
00324
00325 strncpy(data,parse_batt("temperature",contents,dest),TAM);
00326 g_free(contents);
00327 acpi->temp=g_string_new(data);
00328 }
00329
00330
00331
00332 if(g_file_get_contents(TEMP_TRIP,&contents,NULL,NULL)==FALSE){
00333 acpi->temp_critical=g_string_new("");
00334 g_free(contents);
00335 g_warning("Failed to read %s file\n",TEMP_TRIP);
00336 ret=-1;
00337 }else{
00338
00339 strncpy(data,parse_batt("critical",contents,dest),TAM);
00340 g_free(contents);
00341 acpi->temp_critical=g_string_new(data);
00342 }
00343
00344
00345 return(ret);
00346 }
00347
00352 int get_cmd_ver_info(struct cmd_ver *cmdversion)
00353 {
00354 gchar *contents;
00355 gchar *unk_string=_("Unknown");
00356 int ret_val=0;
00357
00358 if(g_file_get_contents(CMD_FILE,&contents,NULL,NULL)==FALSE){
00359 g_free(contents);
00360 cmdversion->cmd=g_string_new(unk_string);
00361 ret_val=-1;
00362 }
00363 else{
00364 cmdversion->cmd=g_string_new(contents);
00365 g_free(contents);
00366 }
00367
00368 if(g_file_get_contents(VER_FILE,&contents,NULL,NULL)==FALSE){
00369 g_free(contents);
00370 cmdversion->version=g_string_new(unk_string);
00371 ret_val=-11;
00372 }
00373 else{
00374 cmdversion->version=g_string_new(contents);
00375 g_free(contents);
00376 }
00377
00378
00379
00380 return(ret_val);
00381 }
00382
00387 int get_loadavg_info(struct cmd_ver *cmdversion)
00388 {
00389 g_assert(cmdversion!=NULL);
00390
00391 char *unk_string=_("Unknown");
00392 gchar *contents;
00393 int ret_val=0;
00394
00395 if(g_file_get_contents(LOAD_FILE,&contents,NULL,NULL)==FALSE){
00396 g_free(contents);
00397 cmdversion->loadavg=g_string_new(unk_string);
00398 ret_val=-1;
00399 }else{
00400 cmdversion->loadavg=g_string_new(contents);
00401 g_free(contents);
00402 }
00403
00404 return(ret_val);
00405 }
00406
00407
00412 int get_channels_info(struct channels_info *channels)
00413 {
00414 g_assert(channels!=NULL);
00415
00416 gchar *contents;
00417 char *unk_string=_("Not available");
00418 int ret_val=-1;
00419
00420 if(g_file_get_contents(IOMEM_FILE,&contents,NULL,NULL)==FALSE){
00421 g_free(contents);
00422 channels->iomem=g_string_new(unk_string);
00423 ret_val=-1;
00424 }else{
00425 channels->iomem=g_string_new(contents);
00426 g_free(contents);
00427 }
00428
00429
00430 if(g_file_get_contents(IOPORTS_FILE,&contents,NULL,NULL)==FALSE){
00431 g_free(contents);
00432 channels->ioports=g_string_new(unk_string);
00433 ret_val=-1;
00434 }else{
00435 channels->ioports=g_string_new(contents);
00436 g_free(contents);
00437 }
00438
00439 if(g_file_get_contents(DMA_FILE,&contents,NULL,NULL)==FALSE){
00440 g_free(contents);
00441 channels->dma=g_string_new(unk_string);
00442 ret_val=-1;
00443 }else{
00444 channels->dma=g_string_new(contents);
00445 g_free(contents);
00446 }
00447
00448 return(ret_val);
00449 }
00450
00451
00457 int get_net_info(struct net_dev_info *netinfo,const int index)
00458 {
00459 g_assert(netinfo!=NULL && index >=0);
00460
00461 gchar *contents;
00462 char *p;
00463 char name[10];
00464 #define BASE 2
00465
00466 if(g_file_get_contents(NET_DEVS,&contents,NULL,NULL)==FALSE){
00467 g_free(contents);
00468 return -1;
00469 }
00470
00471
00472 p=skip_lines((char *)contents,BASE+index);
00473
00474
00475
00476
00477
00478
00479
00480 {
00481 char *p2=NULL;
00482 if((p2=strchr(p,':'))!=NULL)
00483 *p2=' ';
00484
00485 }
00486
00487
00488 sscanf(p,"%s %llu %lu %d %d %d %d %d %d %llu %lu %d %d %d %d %d %d",
00489 name,
00490 &netinfo->bytes[0],&netinfo->packets[0],&netinfo->errs[0],
00491 &netinfo->drop[0],&netinfo->fifo[0],&netinfo->r_frame,
00492 &netinfo->compressed[0],&netinfo->r_multicast,
00493 &netinfo->bytes[1],&netinfo->packets[1],&netinfo->errs[1],
00494 &netinfo->drop[1],&netinfo->fifo[1],&netinfo->t_colls,
00495 &netinfo->t_carrier,&netinfo->compressed[1]);
00496
00497
00498 if((p=strchr(name,':'))!=NULL)
00499 *p='\0';
00500
00501
00502 g_free(contents);
00503
00504 return 0;
00505 }
00506
00507
00508
00513 int get_fs_info(struct fs_info *fsinfo)
00514 {
00515 g_assert(fsinfo!=NULL);
00516
00517 #define STR_DEFAULT _("No info.")
00518 gchar *contents,*p;
00519 char second[20];
00520 char first[20];
00521 char line[80];
00522
00523
00524 if(g_file_get_contents(FS_FILE,&contents,NULL,NULL)==FALSE){
00525
00526 g_warning("No filesystems file");
00527 g_free(contents);
00528 fsinfo->devs=g_string_new(STR_DEFAULT);
00529 fsinfo->nodevs=g_string_new(STR_DEFAULT);
00530 return -1;
00531 }
00532
00533
00534 fsinfo->devs=g_string_new("");
00535 fsinfo->nodevs=g_string_new("");
00536
00537 p=contents;
00538
00539 while(sscanf(p,"%[^\n]",line)!=EOF){
00540 sscanf(line,"%s %s",first,second);
00541 if(line[0]!='n'){
00542 fsinfo->devs=g_string_append(fsinfo->devs,first);
00543 fsinfo->devs=g_string_append(fsinfo->devs,"\n");
00544 }else{
00545 fsinfo->nodevs=g_string_append(fsinfo->nodevs,second);
00546 fsinfo->nodevs=g_string_append(fsinfo->nodevs,"\n");
00547 }
00548
00549
00550 p=strchr(p,'\n') +1;
00551 }
00552
00553 g_free(contents);
00554
00555 return 0;
00556 }
00557
00558
00563 int get_mod_info(struct modules_info *modinfo)
00564 {
00565 g_assert(modinfo!=NULL);
00566
00567 gchar *contents,*p,*p2;
00568 gsize length;
00569 int i;
00570 char *states[]={"Live", "Loading", "Unloading"};
00571 char name[20];
00572 char size[10];
00573 char refcount[5];
00574 char status[10];
00575 char address[20];
00576
00577
00578 if((g_file_get_contents(MOD_FILE,&contents,&length,NULL))==FALSE){
00579 g_warning("No modules information file!");
00580 g_free(contents);
00581 return -1;
00582 }
00583
00584
00585
00586 modinfo->contents=g_string_new("");
00587
00588 p=contents;
00589
00590
00591 while(p-contents!=length){
00592 sscanf(p,"%s %s %s",name,size,refcount);
00593
00594 for(i=0;i<3;i++){
00595 if((p2=strstr(p,states[i]))!=NULL){
00596
00597 sscanf(p2,"%s %s",status,address);
00598 break;
00599 }
00600 }
00601 if(p2!=NULL){
00602 modinfo->contents=g_string_append(modinfo->contents,name);
00603 modinfo->contents=g_string_append(modinfo->contents," ");
00604 modinfo->contents=g_string_append(modinfo->contents, size);
00605 modinfo->contents=g_string_append(modinfo->contents, " ");
00606 modinfo->contents=g_string_append(modinfo->contents, refcount);
00607 modinfo->contents=g_string_append(modinfo->contents," ");
00608 modinfo->contents=g_string_append(modinfo->contents,status);
00609 modinfo->contents=g_string_append(modinfo->contents," ");
00610 modinfo->contents=g_string_append(modinfo->contents, address);
00611 modinfo->contents=g_string_append(modinfo->contents,"\n");
00612 }
00613
00614
00615 p=strchr(p2,'\n')+1;
00616 }
00617
00618
00619
00620 g_free(contents);
00621
00622 return 0;
00623
00624 }