master
runame.c
ohmu
·
2026-10-08
1/* runame - random uname for your os */
2
3/*
4 * TODO: match os name to latest release version
5 */
6
7#include <stdio.h>
8#include <stdlib.h>
9#include <unistd.h>
10#include <sys/time.h>
11
12const char *osnames[] = {
13 "OpenBSD",
14 "FreeBSD",
15 "DragonFly",
16 "NetBSD",
17 "SunOS",
18 "Minix",
19 "Darwin",
20 "AIX",
21 "HP-UX",
22 "IRIX64",
23 "OSF1",
24 "UnixWare",
25 "QNX",
26 "Haiku"
27};
28
29const char *arches[] = {
30 "amd64",
31 "arm64",
32 "aarch64",
33 "i386",
34 "x86_64",
35 "sparc",
36 "sparc64",
37 "powerpc",
38 "powerpc64",
39 "mips64",
40 "alpha",
41 "arm",
42 "armv7",
43 "riscv64",
44 "hppa",
45 "ia64",
46 "unknown"
47};
48
49const char *releases[] = {
50 "7.9",
51 "14.1-RELEASE-p3",
52 "10.0",
53 "6.4-RELEASE",
54 "5.11",
55 "5.10",
56 "24.0.0",
57 "3",
58 "B.11.31",
59 "6.5",
60 "V5.1",
61 "5",
62 "7.1.0",
63 "1",
64 "3.4.0"
65};
66
67const char *versions[] = {
68 "GENERIC.MP#1",
69 "GENERIC#0",
70 "FreeBSD 14.1-RELEASE-p3 GENERIC",
71 "NetBSD 10.0 (GENERIC)",
72 "11.4.42.111.0",
73 "illumos-a1b2c3d4e5",
74 "Darwin Kernel Version 24.0.0: Tue Sep 24 23:39:07 PDT 2024; root:xnu-11215.1.12~1/RELEASE_ARM64_T6000",
75 "7",
76 "U",
77 "07202013",
78 "2650",
79 "7.1.4",
80 "hrev57937"
81};
82
83const char *names[] = {
84 "openbsd.my.domain",
85 "Amnesiac",
86 "solaris",
87 "openindiana",
88 "omnios",
89 "minix",
90 "localhost",
91 "Mac.local",
92 "MacBook-Pro.local",
93 "IRIS",
94 "shredder"
95};
96
97int
98randomvalue(const char *arr[], int len)
99{
100 int n;
101 struct timeval tv;
102 gettimeofday(&tv, NULL);
103 srand(tv.tv_sec ^ tv.tv_usec);
104 n = rand() % len;
105
106 return n;
107}
108
109void
110osname(void)
111{
112 int size;
113
114 size = sizeof(osnames) / sizeof(osnames[0]);
115
116 printf("%s ", osnames[randomvalue(osnames, size)]);
117}
118
119void
120arch(void)
121{
122 int size;
123
124 size = sizeof(arches) / sizeof(arches[0]);
125
126 printf("%s ", arches[randomvalue(arches, size)]);
127}
128
129void
130release(void)
131{
132 int size;
133
134 size = sizeof(releases) / sizeof(releases[0]);
135
136 printf("%s ", releases[randomvalue(releases, size)]);
137}
138
139void
140version(void)
141{
142 int size;
143
144 size = sizeof(versions) / sizeof(versions[0]);
145
146 printf("%s ", versions[randomvalue(versions, size)]);
147}
148
149void
150name(void)
151{
152 int size;
153
154 size = sizeof(names) / sizeof(names[0]);
155
156 printf("%s ", names[randomvalue(names, size)]);
157}
158
159int
160main(int argc, char *argv[])
161{
162 int opt;
163 if(argc == 1)
164 osname();
165
166 while((opt = getopt(argc, argv, "amnprsv")) != -1){
167 switch(opt){
168 case 'm':
169 arch();
170 break;
171 case 'p':
172 arch();
173 break;
174 case 's':
175 osname();
176 break;
177 case 'r':
178 release();
179 break;
180 case 'v':
181 version();
182 break;
183 case 'n':
184 name();
185 break;
186 case 'a':
187 osname();
188 name();
189 release();
190 version();
191 arch();
192 break;
193 default:
194 printf("usage: uname [-amnprsv]\n");
195 return 1;
196 }
197 }
198
199 printf("\n");
200
201 return 0;
202}