17aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley/* free.c - Display amount of free and used memory in the system.
2cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer *
3cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer * Copyright 2012 Elie De Brauwer <eliedebrauwer@gmail.com>
4cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer
59e563e1c6c053ad848a15c30efbbe8a079154fb4Rob Landley// Flag order is signifcant: b-t are units in order, FLAG_h-1 is unit mask
69e563e1c6c053ad848a15c30efbbe8a079154fb4Rob LandleyUSE_FREE(NEWTOY(free, "htgmkb[!htgmkb]", TOYFLAG_USR|TOYFLAG_BIN))
7cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer
8cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwerconfig FREE
97aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley  bool "free"
107aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley  default y
117aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley  help
1240b20421e42cce9834d13ab52ac58efd78838edeRob Landley    usage: free [-bkmgt]
13cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer
1440b20421e42cce9834d13ab52ac58efd78838edeRob Landley    Display the total, free and used amount of physical memory and swap space.
159317c06e2d2081feb37ab36e626707f3a1205576Rob Landley
1640b20421e42cce9834d13ab52ac58efd78838edeRob Landley    -bkmgt	Output units (default is bytes)
179e563e1c6c053ad848a15c30efbbe8a079154fb4Rob Landley    -h	Human readable
18cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer*/
19cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer
20c0e56edaf256adb6c60c5a052525a1ffbb927901Rob Landley#define FOR_free
21cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer#include "toys.h"
22cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer
2340b20421e42cce9834d13ab52ac58efd78838edeRob LandleyGLOBALS(
2440b20421e42cce9834d13ab52ac58efd78838edeRob Landley  unsigned bits;
2540b20421e42cce9834d13ab52ac58efd78838edeRob Landley  unsigned long long units;
269e563e1c6c053ad848a15c30efbbe8a079154fb4Rob Landley  char *buf;
2740b20421e42cce9834d13ab52ac58efd78838edeRob Landley)
2840b20421e42cce9834d13ab52ac58efd78838edeRob Landley
299e563e1c6c053ad848a15c30efbbe8a079154fb4Rob Landleystatic char *convert(unsigned long d)
30cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer{
319e563e1c6c053ad848a15c30efbbe8a079154fb4Rob Landley  long long ll = d*TT.units;
329e563e1c6c053ad848a15c30efbbe8a079154fb4Rob Landley  char *s = TT.buf;
339e563e1c6c053ad848a15c30efbbe8a079154fb4Rob Landley
349e563e1c6c053ad848a15c30efbbe8a079154fb4Rob Landley  if (toys.optflags & FLAG_h) human_readable(s, ll, 0);
359e563e1c6c053ad848a15c30efbbe8a079154fb4Rob Landley  else sprintf(s, "%llu",ll>>TT.bits);
369e563e1c6c053ad848a15c30efbbe8a079154fb4Rob Landley  TT.buf += strlen(TT.buf)+1;
379e563e1c6c053ad848a15c30efbbe8a079154fb4Rob Landley
389e563e1c6c053ad848a15c30efbbe8a079154fb4Rob Landley  return s;
39cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer}
40cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer
41cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwervoid free_main(void)
42cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer{
4340b20421e42cce9834d13ab52ac58efd78838edeRob Landley  struct sysinfo in;
4440b20421e42cce9834d13ab52ac58efd78838edeRob Landley
4540b20421e42cce9834d13ab52ac58efd78838edeRob Landley  sysinfo(&in);
4640b20421e42cce9834d13ab52ac58efd78838edeRob Landley  TT.units = in.mem_unit ? in.mem_unit : 1;
479e563e1c6c053ad848a15c30efbbe8a079154fb4Rob Landley  while ((toys.optflags&(FLAG_h-1)) && !(toys.optflags&(1<<TT.bits))) TT.bits++;
4840b20421e42cce9834d13ab52ac58efd78838edeRob Landley  TT.bits *= 10;
499e563e1c6c053ad848a15c30efbbe8a079154fb4Rob Landley  TT.buf = toybuf;
5040b20421e42cce9834d13ab52ac58efd78838edeRob Landley
5140b20421e42cce9834d13ab52ac58efd78838edeRob Landley  xprintf("\t\ttotal        used        free      shared     buffers\n"
529e563e1c6c053ad848a15c30efbbe8a079154fb4Rob Landley    "Mem:%17s%12s%12s%12s%12s\n-/+ buffers/cache:%15s%12s\n"
539e563e1c6c053ad848a15c30efbbe8a079154fb4Rob Landley    "Swap:%16s%12s%12s\n", convert(in.totalram),
5440b20421e42cce9834d13ab52ac58efd78838edeRob Landley    convert(in.totalram-in.freeram), convert(in.freeram), convert(in.sharedram),
5540b20421e42cce9834d13ab52ac58efd78838edeRob Landley    convert(in.bufferram), convert(in.totalram - in.freeram - in.bufferram),
5640b20421e42cce9834d13ab52ac58efd78838edeRob Landley    convert(in.freeram + in.bufferram), convert(in.totalswap),
5740b20421e42cce9834d13ab52ac58efd78838edeRob Landley    convert(in.totalswap - in.freeswap), convert(in.freeswap));
58cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer}
59