⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os_unix.c

📁 IEEE 802.11a/b/g 服务器端AP
💻 C
字号:
/* * wpa_supplicant/hostapd / OS specific functions for UNIX/POSIX systems * Copyright (c) 2005-2006, Jouni Malinen <j@w1.fi> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * Alternatively, this software may be distributed under the terms of BSD * license. * * See README and COPYING for more details. */#include "includes.h"#include "os.h"void os_sleep(os_time_t sec, os_time_t usec){	if (sec)		sleep(sec);	if (usec)		usleep(usec);}int os_get_time(struct os_time *t){	int res;	struct timeval tv;	res = gettimeofday(&tv, NULL);	t->sec = tv.tv_sec;	t->usec = tv.tv_usec;	return res;}int os_mktime(int year, int month, int day, int hour, int min, int sec,	      os_time_t *t){	struct tm tm, *tm1;	time_t t_local, t1, t2;	os_time_t tz_offset;	if (year < 1970 || month < 1 || month > 12 || day < 1 || day > 31 ||	    hour < 0 || hour > 23 || min < 0 || min > 59 || sec < 0 ||	    sec > 60)		return -1;	memset(&tm, 0, sizeof(tm));	tm.tm_year = year - 1900;	tm.tm_mon = month - 1;	tm.tm_mday = day;	tm.tm_hour = hour;	tm.tm_min = min;	tm.tm_sec = sec;	t_local = mktime(&tm);	/* figure out offset to UTC */	tm1 = localtime(&t_local);	if (tm1) {		t1 = mktime(tm1);		tm1 = gmtime(&t_local);		if (tm1) {			t2 = mktime(tm1);			tz_offset = t2 - t1;		} else			tz_offset = 0;	} else		tz_offset = 0;	*t = (os_time_t) t_local - tz_offset;	return 0;}int os_daemonize(const char *pid_file){#ifdef __unclinux	return -1;#else /* __uclinux */	if (daemon(0, 0)) {		perror("daemon");		return -1;	}	if (pid_file) {		FILE *f = fopen(pid_file, "w");		if (f) {			fprintf(f, "%u\n", getpid());			fclose(f);		}	}	return -0;#endif /* __uclinux */}void os_daemonize_terminate(const char *pid_file){	if (pid_file)		unlink(pid_file);}int os_get_random(unsigned char *buf, size_t len){	FILE *f;	size_t rc;	f = fopen("/dev/urandom", "rb");	if (f == NULL) {		printf("Could not open /dev/urandom.\n");		return -1;	}	rc = fread(buf, 1, len, f);	fclose(f);	return rc != len ? -1 : 0;}unsigned long os_random(void){	return random();}char * os_rel2abs_path(const char *rel_path){	char *buf = NULL, *cwd, *ret;	size_t len = 128, cwd_len, rel_len, ret_len;	int last_errno;	if (rel_path[0] == '/')		return strdup(rel_path);	for (;;) {		buf = malloc(len);		if (buf == NULL)			return NULL;		cwd = getcwd(buf, len);		if (cwd == NULL) {			last_errno = errno;			free(buf);			if (last_errno != ERANGE)				return NULL;			len *= 2;			if (len > 2000)				return NULL;		} else {			buf[len - 1] = '\0';			break;		}	}	cwd_len = strlen(cwd);	rel_len = strlen(rel_path);	ret_len = cwd_len + 1 + rel_len + 1;	ret = malloc(ret_len);	if (ret) {		memcpy(ret, cwd, cwd_len);		ret[cwd_len] = '/';		memcpy(ret + cwd_len + 1, rel_path, rel_len);		ret[ret_len - 1] = '\0';	}	free(buf);	return ret;}int os_program_init(void){	return 0;}void os_program_deinit(void){}int os_setenv(const char *name, const char *value, int overwrite){	return setenv(name, value, overwrite);}int os_unsetenv(const char *name){#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__APPLE__)	unsetenv(name);	return 0;#else	return unsetenv(name);#endif}char * os_readfile(const char *name, size_t *len){	FILE *f;	char *buf;	f = fopen(name, "rb");	if (f == NULL)		return NULL;	fseek(f, 0, SEEK_END);	*len = ftell(f);	fseek(f, 0, SEEK_SET);	buf = malloc(*len);	if (buf == NULL) {		fclose(f);		return NULL;	}	fread(buf, 1, *len, f);	fclose(f);	return buf;}void * os_zalloc(size_t size){	return calloc(1, size);}size_t os_strlcpy(char *dest, const char *src, size_t siz){	const char *s = src;	size_t left = siz;	if (left) {		/* Copy string up to the maximum size of the dest buffer */		while (--left != 0) {			if ((*dest++ = *s++) == '\0')				break;		}	}	if (left == 0) {		/* Not enough room for the string; force NUL-termination */		if (siz != 0)			*dest = '\0';		while (*s++)			; /* determine total src string length */	}	return s - src - 1;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -