Xinqi Bao's Git

Merge pull request #5 from Vlaix/master
authorAaron Marcher <[email protected]>
Thu, 10 Mar 2016 09:59:59 +0000 (10:59 +0100)
committerAaron Marcher <[email protected]>
Thu, 10 Mar 2016 09:59:59 +0000 (10:59 +0100)
Fixed small buffer in get_datetime()

slstatus.c

diff --combined slstatus.c
  
  /* functions */
  void setstatus(char *str);
 +char *smprintf(char *fmt, ...);
  char *get_battery();
  char *get_cpu_temperature();
  char *get_cpu_usage();
  char *get_datetime();
  char *get_ram_usage();
 -char *smprintf(char *fmt, ...);
  char *get_volume();
  char *get_wifi_signal();
  
@@@ -35,36 -35,11 +35,36 @@@ setstatus(char *str
      XSync(dpy, False);
  }
  
 +/* smprintf function */
 +char *
 +smprintf(char *fmt, ...)
 +{
 +    va_list fmtargs;
 +    char *ret;
 +    int len;
 +
 +    va_start(fmtargs, fmt);
 +    len = vsnprintf(NULL, 0, fmt, fmtargs);
 +    va_end(fmtargs);
 +
 +    ret = malloc(++len);
 +    if (ret == NULL) {
 +        fprintf(stderr, "Malloc error.");
 +        exit(1);
 +    }
 +
 +    va_start(fmtargs, fmt);
 +    vsnprintf(ret, len, fmt, fmtargs);
 +    va_end(fmtargs);
 +
 +    return ret;
 +}
 +
  /* battery percentage */
  char *
  get_battery()
  {
 -    int battery_now, battery_full, battery_perc;
 +    int now, full, perc;
      FILE *fp;
  
      /* open battery now file */
@@@ -74,7 -49,7 +74,7 @@@
      }
  
      /* read value */
 -    fscanf(fp, "%i", &battery_now);
 +    fscanf(fp, "%i", &now);
  
      /* close battery now file */
      fclose(fp);
      }
  
      /* read value */
 -    fscanf(fp, "%i", &battery_full);
 +    fscanf(fp, "%i", &full);
  
      /* close battery full file */
      fclose(fp);
  
      /* calculate percent */
 -    battery_perc = battery_now / (battery_full / 100);
 +    perc = now / (full / 100);
  
 -    /* return batt_perc as string */
 -    return smprintf("%d%%", battery_perc);
 +    /* return perc as string */
 +    return smprintf("%d%%", perc);
  }
  
  /* cpu temperature */
@@@ -125,7 -100,7 +125,7 @@@ get_cpu_temperature(
  char *
  get_cpu_usage()
  {
 -    int cpu_perc;
 +    int perc;
      long double a[4], b[4];
      FILE *fp;
  
      fclose(fp);
  
      /* calculate avg in this second */
 -    cpu_perc = 100 * ((b[0]+b[1]+b[2]) - (a[0]+a[1]+a[2])) / ((b[0]+b[1]+b[2]+b[3]) - (a[0]+a[1]+a[2]+a[3]));
 +    perc = 100 * ((b[0]+b[1]+b[2]) - (a[0]+a[1]+a[2])) / ((b[0]+b[1]+b[2]+b[3]) - (a[0]+a[1]+a[2]+a[3]));
  
 -    /* return cpu_perc as string */
 -    return smprintf("%d%%", cpu_perc);
 +    /* return perc as string */
 +    return smprintf("%d%%", perc);
  }
  
  /* date and time */
@@@ -168,25 -143,25 +168,25 @@@ char 
  get_datetime()
  {
      time_t tm;
-     size_t bufsize = 19;
+     size_t bufsize = 64;
      char *buf = malloc(bufsize);
  
      /* get time in format */
      time(&tm);
      if(!strftime(buf, bufsize, timeformat, localtime(&tm))) {
-         fprintf(stderr, "Strftime failed.\n");
+       fprintf(stderr, "Strftime failed.\n");
          exit(1);
      }
  
      /* return time */
 -    return buf;
 +    return smprintf("%s", buf);
  }
  
  /* ram percentage */
  char *
  get_ram_usage()
  {
 -    int ram_perc;
 +    int perc;
      long total, free, buffers, cached;
      FILE *fp;
  
      fclose(fp);
  
      /* calculate percentage */
 -    ram_perc = 100 * ((total - free) - (buffers + cached)) / total;
 +    perc = 100 * ((total - free) - (buffers + cached)) / total;
  
 -    /* return ram_perc as string */
 -    return smprintf("%d%%",ram_perc);
 -}
 -
 -/* smprintf function */
 -char *
 -smprintf(char *fmt, ...)
 -{
 -    va_list fmtargs;
 -    char *ret;
 -    int len;
 -
 -    va_start(fmtargs, fmt);
 -    len = vsnprintf(NULL, 0, fmt, fmtargs);
 -    va_end(fmtargs);
 -
 -    ret = malloc(++len);
 -    if (ret == NULL) {
 -        fprintf(stderr, "Malloc error.");
 -        exit(1);
 -    }
 -
 -    va_start(fmtargs, fmt);
 -    vsnprintf(ret, len, fmt, fmtargs);
 -    va_end(fmtargs);
 -
 -    return ret;
 +    /* return perc as string */
 +    return smprintf("%d%%", perc);
  }
  
  /* alsa volume percentage */
@@@ -266,6 -266,7 +266,6 @@@ get_wifi_signal(
      FILE *fp;
  
      /* generate the path name */
 -
      memset(path, 0, sizeof path);
      strcat(path, path_start);
      strcat(path, wificard);
@@@ -317,13 -318,13 +317,13 @@@ in
  main()
  {
      char status[1024];
 -    char *wifi_signal = NULL;
      char *battery = NULL;
 -    char *cpu_usage = NULL;
      char *cpu_temperature = NULL;
 +    char *cpu_usage = NULL;
 +    char *datetime = NULL;
      char *ram_usage = NULL;
      char *volume = NULL;
 -    char *datetime = NULL;
 +    char *wifi_signal = NULL;
  
      /* open display */
      if (!(dpy = XOpenDisplay(0x0))) {
      /* return status every second */
      for (;;) {
          /* assign the values */
 -        wifi_signal = get_wifi_signal();
          battery = get_battery();
 -        cpu_usage = get_cpu_usage();
          cpu_temperature = get_cpu_temperature();
 +        cpu_usage = get_cpu_usage();
 +        datetime = get_datetime();
          ram_usage = get_ram_usage();
          volume = get_volume();
 -        datetime = get_datetime();
 +        wifi_signal = get_wifi_signal();
  
          /* return the status */
          sprintf(status, FORMATSTRING, ARGUMENTS);
          setstatus(status);
  
          /* free the values */
 -        free(wifi_signal);
          free(battery);
 -        free(cpu_usage);
          free(cpu_temperature);
 +        free(cpu_usage);
 +        free(datetime);
          free(ram_usage);
          free(volume);
 -        free(datetime);
 +        free(wifi_signal);
      }
  
      /* close display */