view toys/posix/uname.c @ 1189:95ae2805622f draft

Add Szabolcs Nagy's deflate/inflate code from git://git.suckless.org/flate Confirmed with him on IRC it's ok to use under toybox license, glued the files together and hammered square peg into round hole, no other changes yet.
author Rob Landley <rob@landley.net>
date Fri, 31 Jan 2014 06:01:30 -0600
parents 7a45b9b54d3d
children
line wrap: on
line source

/* uname.c - return system name
 *
 * Copyright 2008 Rob Landley <rob@landley.net>
 *
 * See http://opengroup.org/onlinepubs/9699919799/utilities/uname.html

USE_UNAME(NEWTOY(uname, "oamvrns[+os]", TOYFLAG_BIN))

config UNAME
  bool "uname"
  default y
  help
    usage: uname [-asnrvm]

    Print system information.

    -s	System name
    -n	Network (domain) name
    -r	Kernel Release number
    -v	Kernel Version 
    -m	Machine (hardware) name
    -a	All of the above
*/

#define FOR_uname
#include "toys.h"

// If a 32 bit x86 build environment working in a chroot under an x86-64
// kernel returns x86_64 for -m it confuses ./configure.  Special case it.

#if defined(__i686__)
#define GROSS "i686"
#elif defined(__i586__)
#define GROSS "i586"
#elif defined(__i486__)
#define GROSS "i486"
#elif defined(__i386__)
#define GROSS "i386"
#endif

void uname_main(void)
{
  int i, flags = toys.optflags, needspace=0;

  uname((void *)toybuf);

  if (!flags) flags = FLAG_s;
  for (i=0; i<5; i++) {
    char *c = toybuf+(65*i);

    if (flags & ((1<<i)|FLAG_a)) {
      int len = strlen(c);

      // This problem originates in autoconf, so of course the solution
      // is horribly ugly.
#ifdef GROSS
      if (i==4 && !strcmp(c,"x86_64")) {
        printf(GROSS);
        continue;
      }
#endif

      if (needspace++) {
        // We can't decrement on the first entry, because
        // needspace would be 0
        *(--c)=' ';
        len++;
      }
      xwrite(1, c, len);
    }
  }
  putchar('\n');
}