--- squashfs-tools/mksquashfs.c +++ squashfs-tools/mksquashfs.c @@ -4859,15 +4859,37 @@ return parse_number(arg, res, 0); } +#if defined(__UCLIBC__) +static long int get_proc_meminfo_value(const char *format) { + char buffer[8192]; + long int value = -1; + FILE *meminfo = fopen ("/proc/meminfo", "r"); + if (meminfo != NULL) { + while (fgets(buffer, sizeof(buffer), meminfo) != NULL) { + if (sscanf(buffer, format, &value) == 1) { + break; + } + } + fclose(meminfo); + } + + return value; +} +#endif int get_physical_memory() { /* Long longs are used here because with PAE, a 32-bit machine can have more than 4GB of physical memory */ +#if defined(__UCLIBC__) + /* UCLIBC doesn't implement sysconf(_SC_PHYS_PAGES) */ + int phys_mem = get_proc_meminfo_value("MemTotal: %ld kB") >> 10; +#else long long num_pages = sysconf(_SC_PHYS_PAGES); long long page_size = sysconf(_SC_PAGESIZE); int phys_mem = num_pages * page_size >> 20; +#endif if(phys_mem < SQUASHFS_LOWMEM) BAD_ERROR("Mksquashfs requires more physical memory than is "