--- kBuild-0.1.9998-pre20120806/src/kmk/kmkbuiltin/chmod.c +++ kBuild-0.1.9998-pre20120806-uclibc/src/kmk/kmkbuiltin/chmod.c @@ -83,6 +83,22 @@ static struct option long_options[] = { 0, 0, 0, 0 }, }; +#ifdef __UCLIBC__ +static int +lchmod(const char *path, mode_t mode) +{ + struct stat s; + + if (lstat(path, &s) < 0) { + return -1; + } + if ((s.st_mode & S_IFMT) != S_IFLNK) { + return chmod(path, mode); + } else { /* On Linux, symlinks always have default permissions */ + return 0; + } +} +#endif int kmk_builtin_chmod(int argc, char *argv[], char **envp) --- kBuild-0.1.9998-pre20120806/src/kmk/kmkbuiltin/cp.c +++ kBuild-0.1.9998-pre20120806-uclibc/src/kmk/kmkbuiltin/cp.c @@ -82,8 +82,10 @@ __FBSDID("$FreeBSD: src/bin/cp/cp.c,v 1. #include "kbuild_protection.h" #if defined(_MSC_VER) || defined(__gnu_linux__) || defined(__linux__) +#ifndef __UCLIBC__ extern char *strlcpy(char *, const char *, size_t); #endif +#endif #ifndef S_IFWHT --- kBuild-0.1.9998-pre20120806/src/kmk/kmkbuiltin/cp_utils.c +++ kBuild-0.1.9998-pre20120806-uclibc/src/kmk/kmkbuiltin/cp_utils.c @@ -84,6 +84,13 @@ __FBSDID("$FreeBSD: src/bin/cp/utils.c,v # define S_ISVTX 0 #endif +#ifdef __UCLIBC__ +/* Fake lchmod because Linux symlinks always have mode 0777 */ +static inline int lchmod(const char* path, mode_t mode) +{ + return 0; +} +#endif int copy_file(const FTSENT *entp, int dne, int changed_only, int *pcopied) --- kBuild-0.1.9998-pre20120806/src/kmk/kmkbuiltin/fts.c +++ kBuild-0.1.9998-pre20120806-uclibc/src/kmk/kmkbuiltin/fts.c @@ -75,7 +75,7 @@ __RCSID("$NetBSD: __fts13.c,v 1.44 2005/ #endif #if ! HAVE_NBTOOL_CONFIG_H -# if !defined(__sun__) && !defined(__gnu_linux__) && !defined(__HAIKU__) +# if !defined(__sun__) && !defined(__gnu_linux__) && !defined(__HAIKU__) && !defined(__UCLIBC__) # define HAVE_STRUCT_DIRENT_D_NAMLEN 1 # endif #endif --- kBuild-0.1.9998-pre20120806/src/lib/k/kDefs.h +++ kBuild-0.1.9998-pre20120806-uclibc/src/lib/k/kDefs.h @@ -82,7 +82,7 @@ # define K_OS K_OS_FREEBSD # elif defined(__HAIKU__) # define K_OS K_OS_HAIKU -# elif defined(__gnu_linux__) +# elif defined(__gnu_linux__) || defined(__UCLIBC__) # define K_OS K_OS_LINUX # elif defined(__NetBSD__) /*??*/ # define K_OS K_OS_NETBSD --- kBuild-0.1.9998-pre20120806/src/kmk/job.c +++ kBuild-0.1.9998-pre20120806-uclibc2/src/kmk/job.c @@ -195,7 +195,9 @@ int getgid (); # endif #endif +#ifndef __UCLIBC__ int getloadavg (double loadavg[], int nelem); +#endif int start_remote_job (char **argv, char **envp, int stdin_fd, int *is_remote, int *id_ptr, int *used_stdin); int start_remote_job_p (int); @@ -2050,6 +2052,27 @@ job_next_command (struct child *child) #define LOAD_WEIGHT_A 0.25 #define LOAD_WEIGHT_B 0.25 +#ifdef __UCLIBC__ +static int getloadavg(double loadavg[], int nelem) +{ + int read = 0; + if ((nelem > 0) && (loadavg != NULL)) { + FILE* loadavgfile = fopen("/proc/loadavg", "r"); + if (loadavgfile != NULL) { + if (nelem == 1) { + read = fscanf(loadavgfile, "%lf", &loadavg[0]); + } else if (nelem == 2) { + read = fscanf(loadavgfile, "%lf %lf", &loadavg[0], &loadavg[1]); + } else if (nelem >= 3) { + read = fscanf(loadavgfile, "%lf %lf %lf", &loadavg[0], &loadavg[1], &loadavg[2]); + } + fclose(loadavgfile); + } + } + return read; +} +#endif + static int load_too_high (void) {