- cleaned up
This commit is contained in:
parent
be01ee5e40
commit
48d26b2d15
2
Makefile
2
Makefile
@ -163,7 +163,7 @@ include .depend
|
||||
endif
|
||||
|
||||
gencpio: gen_init_cpio.c
|
||||
gcc -Wall -O2 $^ -o $@
|
||||
$(CC) $(CFLAGS) -o $@ $^
|
||||
|
||||
install: $(TARGETS)
|
||||
mkdir -p $(DESTDIR)$(BINDIR) $(DESTDIR)$(BINSDIR)
|
||||
|
@ -38,7 +38,7 @@ endif
|
||||
ifeq (ppc, $(ARCH))
|
||||
CFLAGS += -Os -pipe -Wall -fomit-frame-pointer
|
||||
else
|
||||
CFLAGS += -pipe -Wall -Wno-deprecated-declarations -D_BSD_SOURCE -D_GNU_SOURCE
|
||||
CFLAGS := -pipe -Wall -O2
|
||||
endif
|
||||
|
||||
GLIBC_INCLUDES =
|
||||
|
2
dhcp.c
2
dhcp.c
@ -95,7 +95,7 @@ struct bootp_request {
|
||||
char hwaddr[16];
|
||||
char servername[64];
|
||||
char bootfile[128];
|
||||
char vendor[DHCP_VENDOR_LENGTH];
|
||||
unsigned char vendor[DHCP_VENDOR_LENGTH];
|
||||
} ;
|
||||
|
||||
static const char vendor_cookie[] = { 99, 130, 83, 99, 255 };
|
||||
|
15
disk.c
15
disk.c
@ -69,15 +69,14 @@ static const char * detect_partition_type(char * dev)
|
||||
struct partition_detection_anchor anchor0;
|
||||
struct partition_detection_anchor anchor1;
|
||||
struct partition_detection_anchor anchor2;
|
||||
};
|
||||
struct partition_detection_info partitions_signatures[] = {
|
||||
{ "Linux Swap", { 4086, "SWAP-SPACE" }, { 0, NULL } },
|
||||
{ "Linux Swap", { 4086, "SWAPSPACE2" }, { 0, NULL } },
|
||||
{ "Ext2", { 0x438, "\x53\xEF" }, { 0, NULL } },
|
||||
{ "ReiserFS", { 0x10034, "ReIsErFs" }, { 0, NULL } },
|
||||
{ "ReiserFS", { 0x10034, "ReIsEr2Fs" }, { 0, NULL } },
|
||||
} partitions_signatures[] = {
|
||||
{ "Linux Swap", { 4086, "SWAP-SPACE" }, { 0, NULL }, { 0, NULL } },
|
||||
{ "Linux Swap", { 4086, "SWAPSPACE2" }, { 0, NULL }, { 0, NULL } },
|
||||
{ "Ext2", { 0x438, "\x53\xEF" }, { 0, NULL }, { 0, NULL } },
|
||||
{ "ReiserFS", { 0x10034, "ReIsErFs" }, { 0, NULL }, { 0, NULL } },
|
||||
{ "ReiserFS", { 0x10034, "ReIsEr2Fs" }, { 0, NULL }, { 0, NULL } },
|
||||
{ "XFS", { 0, "XFSB" }, { 0x200, "XAGF" }, { 0x400, "XAGI" } },
|
||||
{ "JFS", { 0x8000, "JFS1" }, { 0, NULL } },
|
||||
{ "JFS", { 0x8000, "JFS1" }, { 0, NULL }, { 0, NULL } },
|
||||
{ "NTFS", { 0x1FE, "\x55\xAA" }, { 0x3, "NTFS" }, { 0, NULL } },
|
||||
{ "FAT32", { 0x1FE, "\x55\xAA" }, { 0x52, "FAT32" }, { 0, NULL } },
|
||||
{ "FAT", { 0x1FE, "\x55\xAA" }, { 0x36, "FAT" }, { 0, NULL } },
|
||||
|
50
init.c
50
init.c
@ -54,7 +54,7 @@ char ** myenv = NULL;
|
||||
int klog_pid;
|
||||
|
||||
|
||||
void fatal_error(char *msg)
|
||||
void fatal_error(const char *msg)
|
||||
{
|
||||
printf("FATAL ERROR IN INIT: %s : %s\n\nI can't recover from this, please reboot manually and send bugreport.\n", msg,strerror(errno));
|
||||
while (1);
|
||||
@ -70,41 +70,13 @@ void print_warning(char *msg)
|
||||
printf("W: %s\n", msg);
|
||||
}
|
||||
|
||||
void print_int_init(int fd, int i)
|
||||
{
|
||||
char buf[10];
|
||||
char * chptr = buf + 9;
|
||||
int j = 0;
|
||||
|
||||
if (i < 0)
|
||||
{
|
||||
write(1, "-", 1);
|
||||
i = -1 * i;
|
||||
}
|
||||
|
||||
while (i)
|
||||
{
|
||||
*chptr-- = '0' + (i % 10);
|
||||
j++;
|
||||
i = i / 10;
|
||||
}
|
||||
|
||||
write(fd, chptr + 1, j);
|
||||
}
|
||||
|
||||
void print_str_init(int fd, char * string)
|
||||
{
|
||||
write(fd, string, strlen(string));
|
||||
}
|
||||
|
||||
|
||||
/* fork to:
|
||||
* (1) watch /proc/kmsg and copy the stuff to /dev/tty4
|
||||
* (2) listens to /dev/log and copy also this stuff (log from programs)
|
||||
*/
|
||||
void doklog()
|
||||
{
|
||||
int in, out, i;
|
||||
int in, out, i, ii;
|
||||
int log;
|
||||
char buf[1024];
|
||||
|
||||
@ -145,8 +117,8 @@ void doklog()
|
||||
i = read(in, buf, sizeof(buf));
|
||||
if (i > 0) {
|
||||
if (out >= 0)
|
||||
write(out, buf, i);
|
||||
write(log, buf, i);
|
||||
ii = write(out, buf, i);
|
||||
ii = write(log, buf, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -281,9 +253,8 @@ static int nuke(const char *what)
|
||||
if ( err ) {
|
||||
errno = err;
|
||||
fatal_error(what);
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct filesystem
|
||||
@ -413,9 +384,12 @@ int main(int argc, char **argv)
|
||||
}
|
||||
|
||||
char my_hostname[] = "localhost.localdomain";
|
||||
sethostname(my_hostname, sizeof(my_hostname));
|
||||
if (sethostname(my_hostname, sizeof(my_hostname)) < 0)
|
||||
print_error("could not set hostname");
|
||||
|
||||
/* the default domainname (as of 2.0.35) is "(none)", which confuses glibc */
|
||||
setdomainname("", 0);
|
||||
if (setdomainname("", 0) < 0)
|
||||
print_error("could not set domainname");
|
||||
|
||||
doklog();
|
||||
|
||||
@ -429,7 +403,9 @@ int main(int argc, char **argv)
|
||||
printf("Running stage1...\n");
|
||||
|
||||
/* create a pipe for env passing */
|
||||
pipe(fds);
|
||||
if (pipe(fds) < 0)
|
||||
fatal_error("failed to create env pipe");
|
||||
|
||||
fcntl(fds[0], F_SETFD, 1);
|
||||
fcntl(fds[1], F_SETFD, 0);
|
||||
|
||||
|
42
modules.c
42
modules.c
@ -87,11 +87,6 @@ static void *grab_file(const char *filename, unsigned long *size)
|
||||
return buffer;
|
||||
}
|
||||
|
||||
static void release_file(void *data, unsigned long size)
|
||||
{
|
||||
free(data);
|
||||
}
|
||||
|
||||
int insmod_call(char *pathname, char *params)
|
||||
{
|
||||
void *file;
|
||||
@ -105,7 +100,7 @@ int insmod_call(char *pathname, char *params)
|
||||
}
|
||||
|
||||
rc = init_module(file, len, params == NULL ? "" : params);
|
||||
release_file(file, len);
|
||||
free(file);
|
||||
if (rc != 0) {
|
||||
log_message("init_module: '%s': %s", pathname, moderror(errno));
|
||||
return rc;
|
||||
@ -130,7 +125,7 @@ static enum insmod_return insmod_archived_file(const char * mod_name, char * opt
|
||||
return INSMOD_FAILED;
|
||||
|
||||
rc = init_module(file, len, options == NULL ? "" : options);
|
||||
release_file(file, len);
|
||||
free(file);
|
||||
if (rc != 0) {
|
||||
log_message("init_module: '%s': %s", module_name, moderror(errno));
|
||||
return INSMOD_FAILED;
|
||||
@ -233,33 +228,6 @@ void init_modules_insmoding(void)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void add_modules_conf(char * str)
|
||||
{
|
||||
static char data[500] = "";
|
||||
char * target = "/etc/modules.conf";
|
||||
int fd;
|
||||
|
||||
if (strlen(data) + strlen(str) >= sizeof(data))
|
||||
return;
|
||||
|
||||
strcat(data, str);
|
||||
strcat(data, "\n");
|
||||
|
||||
fd = open(target, O_CREAT|O_WRONLY|O_TRUNC, 00660);
|
||||
|
||||
if (fd == -1) {
|
||||
log_perror(str);
|
||||
return;
|
||||
}
|
||||
|
||||
if (write(fd, data, strlen(data) + 1) != strlen(data) + 1)
|
||||
log_perror(str);
|
||||
|
||||
close(fd);
|
||||
}
|
||||
|
||||
|
||||
static int module_already_present(const char * name)
|
||||
{
|
||||
FILE * f;
|
||||
@ -307,7 +275,7 @@ enum insmod_return my_insmod(const char * mod_name, enum driver_type type, char
|
||||
char alias[500];
|
||||
int i;
|
||||
#ifndef DISABLE_NETWORK
|
||||
char ** net_devices = NULL; /* fucking compiler */
|
||||
char ** net_devices = NULL;
|
||||
#endif
|
||||
|
||||
log_message("have to insmod %s", mod_name);
|
||||
@ -343,8 +311,6 @@ enum insmod_return my_insmod(const char * mod_name, enum driver_type type, char
|
||||
goto already_present;
|
||||
ptr++;
|
||||
}
|
||||
sprintf(alias, "alias %s %s", *new_net_devices, mod_name);
|
||||
add_modules_conf(alias);
|
||||
log_message("NET: %s", alias);
|
||||
net_discovered_interface(*new_net_devices);
|
||||
|
||||
@ -380,8 +346,6 @@ static enum return_type insmod_with_options(char * mod, enum driver_type type)
|
||||
return RETURN_ERROR;
|
||||
}
|
||||
|
||||
add_modules_conf(options);
|
||||
|
||||
return RETURN_OK;
|
||||
}
|
||||
|
||||
|
@ -34,6 +34,7 @@
|
||||
#include <newt.h>
|
||||
|
||||
#include "frontend.h"
|
||||
#include "tools.h"
|
||||
|
||||
void init_frontend(char * welcome_msg)
|
||||
{
|
||||
|
@ -39,7 +39,7 @@
|
||||
* Wed Oct 1 23:55:28 1997: Dick Streefland <dick_streefland@tasking.com>
|
||||
* Implemented the "bg", "fg" and "retry" mount options for NFS.
|
||||
*
|
||||
* 1999-02-22 Arkadiusz Miśkiewicz <misiek@pld.ORG.PL>
|
||||
* 1999-02-22 Arkadiusz Mi kiewicz <misiek@pld.ORG.PL>
|
||||
* - added Native Language Support
|
||||
*
|
||||
* Modified by Olaf Kirch and Trond Myklebust for new NFS code,
|
||||
|
11
probing.c
11
probing.c
@ -139,7 +139,7 @@ char * get_net_intf_description(char * intf_name)
|
||||
static struct pci_module_map * get_pci_ids()
|
||||
{
|
||||
static struct pci_module_map * pcidb = NULL;
|
||||
struct pci_module_map * last, *new;
|
||||
struct pci_module_map *new, *last = NULL;
|
||||
char buf[50];
|
||||
int v, d;
|
||||
FILE *f;
|
||||
@ -221,7 +221,7 @@ static void pci_probe(enum driver_type type)
|
||||
}
|
||||
|
||||
while (NULL != fgets(buf, sizeof(buf), f)) {
|
||||
int i, matched, dfn, vendor, device, class, subv, subid;
|
||||
int i, fd, matched, dfn, vendor, device, class, subv, subid;
|
||||
struct pci_module_map * pcidb;
|
||||
|
||||
sscanf(buf, "%x %x", &dfn, &vendor);
|
||||
@ -233,9 +233,9 @@ static void pci_probe(enum driver_type type)
|
||||
|
||||
log_message("gathering info for %s", devname);
|
||||
|
||||
if ((i = open(devname, O_RDONLY)) != -1) {
|
||||
read(i, devdata, sizeof(devdata));
|
||||
close(i);
|
||||
if ((fd = open(devname, O_RDONLY)) != -1) {
|
||||
i = read(fd, devdata, sizeof(devdata));
|
||||
close(fd);
|
||||
} else continue;
|
||||
|
||||
class = devdata[9] | (devdata[10] << 8) | (devdata[11] << 16);
|
||||
@ -363,7 +363,6 @@ static void usb_probe(enum driver_type type)
|
||||
|
||||
FILE * f;
|
||||
char buf[200];
|
||||
static struct usb_module_map * usb_ids = NULL;
|
||||
|
||||
switch (type) {
|
||||
#ifdef ENABLE_USBNET
|
||||
|
@ -1,11 +1,8 @@
|
||||
# -*- rpm-spec -*-
|
||||
# $Id$
|
||||
|
||||
%def_with shell
|
||||
|
||||
Name: propagator
|
||||
Version: 20061123
|
||||
Release: alt1.0.glibc.1
|
||||
Version: 20070301
|
||||
Release: alt0.1
|
||||
|
||||
Summary: 'Early userspace' set of binaries
|
||||
License: GPL
|
||||
@ -13,20 +10,17 @@ Group: System/Kernel and hardware
|
||||
|
||||
Source0: %name-%version.tar.bz2
|
||||
|
||||
BuildPreReq: mar-glibc
|
||||
|
||||
# Automatically added by buildreq on Thu Feb 01 2007
|
||||
BuildRequires: bzlib-devel-static libnewt-devel-static libslang-devel-static
|
||||
BuildRequires: mar >= 20070301-alt1 bzlib-devel-static libnewt-devel-static libslang-devel-static
|
||||
|
||||
%description
|
||||
%name is a set of binaries useful in 'early userspace' environment,
|
||||
including init and various helpers for hw probing and bootstrapping.
|
||||
|
||||
%prep
|
||||
%setup -qc
|
||||
%setup -c
|
||||
|
||||
%build
|
||||
make %{?_with_shell:WITH_SHELL=t}
|
||||
make %{?_with_shell:WITH_SHELL=t} CFLAGS="$RPM_OPT_FLAGS"
|
||||
|
||||
%install
|
||||
%make_install DESTDIR=%buildroot LIBDIR=%_libdir install
|
||||
@ -36,8 +30,10 @@ make %{?_with_shell:WITH_SHELL=t}
|
||||
%_libdir/%name
|
||||
|
||||
%changelog
|
||||
* Fri Feb 02 2007 Nick S. Grechukh <gns@altlinux.ru> 20061123-alt1.0.glibc.1
|
||||
- accurate glibc patch, instead of published dirty hack
|
||||
* Thu Mar 1 2007 Sergey Bolshakov <sbolshakov@altlinux.ru> 20070301-alt0.1
|
||||
- switch to glibc, thanks to gns@
|
||||
- redo block device probing, based on sysfs
|
||||
- cleaned up
|
||||
|
||||
* Thu Nov 23 2006 Sergey Bolshakov <sbolshakov@altlinux.ru> 20061123-alt1
|
||||
- added conditional shell spawning
|
||||
|
88
tools.c
88
tools.c
@ -318,74 +318,66 @@ int prepare_progress()
|
||||
{
|
||||
char readbuffer[4096];
|
||||
int size;
|
||||
|
||||
if (splashfd > 0) return(0);
|
||||
splashfd = open(PROCSPLASH,O_RDWR);
|
||||
if (splashfd < 0)
|
||||
{
|
||||
|
||||
splashfd = open(PROCSPLASH,O_RDWR);
|
||||
if (splashfd < 0) {
|
||||
log_message("Error open /proc/splash\n");
|
||||
return(-1);
|
||||
}
|
||||
size = read(splashfd, readbuffer, sizeof(readbuffer));
|
||||
if ( strstr(readbuffer,"silent") && strstr(readbuffer,": on") )
|
||||
{
|
||||
log_message("bootsplash detected and progress enabled");
|
||||
}
|
||||
else
|
||||
{
|
||||
close(splashfd);
|
||||
splashfd = -1;
|
||||
}
|
||||
if (splashcount == 0 )
|
||||
{
|
||||
char * splash_param = get_param_valued("splashcount");
|
||||
if (!splash_param)
|
||||
{
|
||||
splashcount = -1;
|
||||
return;
|
||||
}
|
||||
if (sscanf(splash_param,"%d",&splashcount) != 1)
|
||||
{
|
||||
splashcount = -1;
|
||||
return;
|
||||
}
|
||||
size = read(splashfd, readbuffer, sizeof(readbuffer));
|
||||
if (strstr(readbuffer,"silent") && strstr(readbuffer,": on")) {
|
||||
log_message("bootsplash detected and progress enabled");
|
||||
} else {
|
||||
close(splashfd);
|
||||
splashfd = -1;
|
||||
}
|
||||
return(0);
|
||||
if (splashcount == 0 ) {
|
||||
char * splash_param = get_param_valued("splashcount");
|
||||
if (!splash_param) {
|
||||
splashcount = -1;
|
||||
return(0);
|
||||
}
|
||||
if (sscanf(splash_param,"%d",&splashcount) != 1) {
|
||||
splashcount = -1;
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
|
||||
void close_progress()
|
||||
{
|
||||
char * tmpcount;
|
||||
char * tmpstep;
|
||||
char s[16];
|
||||
if (splashfd < 0)
|
||||
return;
|
||||
close(splashfd);
|
||||
sprintf(tmpcount,"%i",splashcount);
|
||||
sprintf(tmpstep,"%i",splashstep);
|
||||
add_to_env("SPLASHCOUNT",tmpcount);
|
||||
add_to_env("SPLASHSTEP",tmpstep);
|
||||
snprintf(s, sizeof(s), "%i", splashcount);
|
||||
add_to_env("SPLASHCOUNT", s);
|
||||
snprintf(s, sizeof(s), "%i", splashstep);
|
||||
add_to_env("SPLASHSTEP", s);
|
||||
return;
|
||||
}
|
||||
|
||||
void set_splash(char * mode)
|
||||
int set_splash(char * mode)
|
||||
{
|
||||
if (splashfd < 0)
|
||||
return;
|
||||
write(splashfd,mode, strlen(mode));
|
||||
return;
|
||||
return 0;
|
||||
return(write(splashfd, mode, strlen(mode)));
|
||||
}
|
||||
|
||||
void update_splash()
|
||||
int update_splash()
|
||||
{
|
||||
int progress = 0;
|
||||
char data[32];
|
||||
if (splashcount <= 0)
|
||||
return;
|
||||
++splashstep;
|
||||
return 0;
|
||||
splashstep++;
|
||||
progress = (65534 * splashstep ) / splashcount;
|
||||
log_message("boostplash progress: %i",progress);
|
||||
sprintf(data,"show %i\n",progress);
|
||||
write(splashfd,data,strlen(data));
|
||||
return;
|
||||
return write(splashfd,data,strlen(data));
|
||||
}
|
||||
|
||||
char * get_ramdisk_realname(void)
|
||||
@ -403,9 +395,9 @@ char * get_ramdisk_realname(void)
|
||||
return strdup(img_name);
|
||||
}
|
||||
|
||||
char * get_ramdisk_path(char *mount_path)
|
||||
char * get_ramdisk_path(const char *mount_path)
|
||||
{
|
||||
char * img_name[500];
|
||||
char img_name[500];
|
||||
char * st2_path = get_ramdisk_realname();
|
||||
|
||||
/* FIXME */
|
||||
@ -480,17 +472,19 @@ void add_to_env(char * name, char * value)
|
||||
my_env[env_size] = NULL;
|
||||
}
|
||||
|
||||
void pass_env(int fd)
|
||||
int pass_env(int fd)
|
||||
{
|
||||
char ** ptr = my_env;
|
||||
char *s;
|
||||
|
||||
int i = 0;
|
||||
|
||||
while (ptr && *ptr) {
|
||||
s = *ptr;
|
||||
while(*s++);
|
||||
write(fd, *ptr, s - *ptr);
|
||||
i = write(fd, *ptr, s - *ptr);
|
||||
ptr++;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
char ** list_directory(char * direct)
|
||||
|
8
tools.h
8
tools.h
@ -38,11 +38,15 @@ void * memdup(void *src, size_t size);
|
||||
void add_to_env(char * name, char * value);
|
||||
void handle_env(char ** env);
|
||||
char ** grab_env(void);
|
||||
void pass_env(int);
|
||||
int pass_env(int);
|
||||
char ** list_directory(char * direct);
|
||||
int string_array_length(char ** a);
|
||||
int do_losetup(char * device, char * target);
|
||||
char * get_ramdisk_path(char *);
|
||||
char * get_ramdisk_path(const char *);
|
||||
int set_splash(char *);
|
||||
int update_splash(void);
|
||||
int prepare_progress(void);
|
||||
void close_progress(void);
|
||||
|
||||
struct param_elem
|
||||
{
|
||||
|
2
url.c
2
url.c
@ -425,7 +425,7 @@ int http_download_file(char * hostname, char * remotename, int * size)
|
||||
|
||||
buf = alloca(strlen(remotename) + 20);
|
||||
sprintf(buf, "GET %s HTTP/1.0\r\n\r\n", remotename);
|
||||
write(sock, buf, strlen(buf));
|
||||
rc = write(sock, buf, strlen(buf));
|
||||
|
||||
/* This is fun; read the response a character at a time until we:
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user