summaryrefslogtreecommitdiffstats
path: root/mbbsd/stuff.c
diff options
context:
space:
mode:
authorkcwu <kcwu@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2007-12-12 09:42:23 +0800
committerkcwu <kcwu@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2007-12-12 09:42:23 +0800
commit9a12adf6d29cdefc98afe2566a9e5479489f111b (patch)
tree6e2b911398cb6dcb08b183ab645817e098182968 /mbbsd/stuff.c
parent3d16ea67c380607528e7c8df0b2cc5a2f2636b9f (diff)
downloadpttbbs-9a12adf6d29cdefc98afe2566a9e5479489f111b.tar
pttbbs-9a12adf6d29cdefc98afe2566a9e5479489f111b.tar.gz
pttbbs-9a12adf6d29cdefc98afe2566a9e5479489f111b.tar.bz2
pttbbs-9a12adf6d29cdefc98afe2566a9e5479489f111b.tar.lz
pttbbs-9a12adf6d29cdefc98afe2566a9e5479489f111b.tar.xz
pttbbs-9a12adf6d29cdefc98afe2566a9e5479489f111b.tar.zst
pttbbs-9a12adf6d29cdefc98afe2566a9e5479489f111b.zip
* extract common functions as library.
git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@3673 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'mbbsd/stuff.c')
-rw-r--r--mbbsd/stuff.c448
1 files changed, 3 insertions, 445 deletions
diff --git a/mbbsd/stuff.c b/mbbsd/stuff.c
index 371583f4..abe65680 100644
--- a/mbbsd/stuff.c
+++ b/mbbsd/stuff.c
@@ -1,6 +1,5 @@
/* $Id$ */
#include "bbs.h"
-#include "fnv_hash.h"
/* ----------------------------------------------------- */
/* set file path for boards/user home */
@@ -9,7 +8,6 @@ static const char * const str_home_file = "home/%c/%s/%s";
static const char * const str_board_file = "boards/%c/%s/%s";
static const char * const str_board_n_file = "boards/%c/%s/%s.%d";
-static char cdate_buffer[32];
static const char * const str_dotdir = FN_DIR;
@@ -127,81 +125,6 @@ subject(char *title)
return title;
}
-/* ----------------------------------------------------- */
-/* 字串轉換檢查函數 */
-/* ----------------------------------------------------- */
-/**
- * 將字串 s 轉為小寫存回 t
- * @param t allocated char array
- * @param s
- */
-void
-str_lower(char *t, const char *s)
-{
- register unsigned char ch;
-
- do {
- ch = *s++;
- *t++ = char_lower(ch);
- } while (ch);
-}
-
-/**
- * 移除字串 buf 後端多餘的空白。
- * @param buf
- */
-void
-trim(char *buf)
-{ /* remove trailing space */
- char *p = buf;
-
- while (*p)
- p++;
- while (--p >= buf) {
- if (*p == ' ')
- *p = '\0';
- else
- break;
- }
-}
-
-/**
- * 移除 src 的 '\n' 並改成 '\0'
- * @param src
- */
-void chomp(char *src)
-{
- while(*src){
- if (*src == '\n')
- *src = 0;
- else
- src++;
- }
-}
-
-/* ----------------------------------------------------- */
-/* 字串檢查函數:英文、數字、檔名、E-mail address */
-/* ----------------------------------------------------- */
-
-int
-invalid_pname(const char *str)
-{
- const char *p1, *p2, *p3;
-
- p1 = str;
- while (*p1) {
- if (!(p2 = strchr(p1, '/')))
- p2 = str + strlen(str);
- if (p1 + 1 > p2 || p1 + strspn(p1, ".") == p2) /* 不允許用 / 開頭, 或是 // 之間只有 . */
- return 1;
- for (p3 = p1; p3 < p2; p3++)
- if (not_alnum(*p3) && !strchr("@[]-._", *p3)) /* 只允許 alnum 或這些符號 */
- return 1;
- p1 = p2 + (*p2 ? 1 : 0);
- }
- return 0;
-}
-
int is_validuserid(const char *id)
{
int len, i;
@@ -212,10 +135,10 @@ int is_validuserid(const char *id)
if (len < 2 || len>IDLEN)
return 0;
- if (not_alpha(id[0]))
+ if (!isalpha(id[0]))
return 0;
for (i = 1; i < len; i++)
- if (not_alnum(id[i]))
+ if (!isalnum(id[i]))
return 0;
return 1;
}
@@ -279,197 +202,12 @@ userid_is_BM(const char *userid, const char *list)
return 0;
}
-/* ----------------------------------------------------- */
-/* 檔案檢查函數:檔案、目錄、屬於 */
-/* ----------------------------------------------------- */
-
-/**
- * 傳回 fname 的檔案大小
- * @param fname
- */
-off_t
-dashs(const char *fname)
-{
- struct stat st;
-
- if (!stat(fname, &st))
- return st.st_size;
- else
- return -1;
-}
-
-/**
- * 傳回 fname 的 mtime
- * @param fname
- */
-time4_t
-dasht(const char *fname)
-{
- struct stat st;
-
- if (!stat(fname, &st))
- return st.st_mtime;
- else
- return -1;
-}
-
-/**
- * 傳回 fname 是否為 symbolic link
- * @param fname
- */
-int
-dashl(const char *fname)
-{
- struct stat st;
-
- return (lstat(fname, &st) == 0 && S_ISLNK(st.st_mode));
-}
-
-/**
- * 傳回 fname 是否為一般的檔案
- * @param fname
- */
-int
-dashf(const char *fname)
-{
- struct stat st;
-
- return (stat(fname, &st) == 0 && S_ISREG(st.st_mode));
-}
-
-/**
- * 傳回 fname 是否為目錄
- * @param fname
- */
-int
-dashd(const char *fname)
-{
- struct stat st;
-
- return (stat(fname, &st) == 0 && S_ISDIR(st.st_mode));
-}
-
-#define BUFFER_SIZE 8192
-static int copy_file_to_file(const char *src, const char *dst)
-{
- char buf[BUFFER_SIZE];
- int fdr, fdw, len;
-
- if ((fdr = open(src, O_RDONLY)) < 0)
- return -1;
-
- if ((fdw = open(dst, O_WRONLY | O_CREAT | O_TRUNC, 0600)) < 0) {
- close(fdr);
- return -1;
- }
-
- while (1) {
- len = read(fdr, buf, sizeof(buf));
- if (len <= 0)
- break;
- write(fdw, buf, len);
- if (len < BUFFER_SIZE)
- break;
- }
-
- close(fdr);
- close(fdw);
- return 0;
-}
-#undef BUFFER_SIZE
-
-static int copy_file_to_dir(const char *src, const char *dst)
-{
- char buf[PATHLEN];
- char *slash;
- if ((slash = rindex(src, '/')) == NULL)
- snprintf(buf, PATHLEN, "%s/%s", dst, src);
- else
- snprintf(buf, PATHLEN, "%s/%s", dst, slash);
- return copy_file_to_file(src, buf);
-}
-
-static int copy_dir_to_dir(const char *src, const char *dst)
-{
- DIR *dir;
- struct dirent *entry;
- struct stat st;
- char buf[PATHLEN], buf2[PATHLEN];
-
- if (stat(dst, &st) < 0)
- if (mkdir(dst, 0700) < 0)
- return -1;
-
- if ((dir = opendir(src)) == NULL)
- return -1;
-
- while ((entry = readdir(dir)) != NULL) {
- if (strcmp(entry->d_name, ".") == 0 ||
- strcmp(entry->d_name, "..") == 0)
- continue;
- snprintf(buf, PATHLEN, "%s/%s", src, entry->d_name);
- snprintf(buf2, PATHLEN, "%s/%s", dst, entry->d_name);
- if (stat(buf, &st) < 0)
- continue;
- if (S_ISDIR(st.st_mode))
- mkdir(buf2, 0700);
- copy_file(buf, buf2);
- }
-
- closedir(dir);
- return 0;
-}
-
-/**
- * copy src to dst (recursively)
- * @param src and dst are file or dir
- * @return -1 if failed
- */
-int copy_file(const char *src, const char *dst)
-{
- struct stat st;
-
- if (stat(dst, &st) == 0 && S_ISDIR(st.st_mode)) {
- if (stat(src, &st) < 0)
- return -1;
-
- if (S_ISDIR(st.st_mode))
- return copy_dir_to_dir(src, dst);
- else if (S_ISREG(st.st_mode))
- return copy_file_to_dir(src, dst);
- return -1;
- }
- else if (stat(src, &st) == 0 && S_ISDIR(st.st_mode))
- return copy_dir_to_dir(src, dst);
- return copy_file_to_file(src, dst);
-}
-
int
belong(const char *filelist, const char *key)
{
return file_exist_record(filelist, key);
}
-unsigned int
-ipstr2int(const char *ip)
-{
- unsigned int i, val = 0;
- char buf[32];
- char *nil, *p;
-
- strlcpy(buf, ip, sizeof(buf));
- p = buf;
- for (i = 0; i < 4; i++) {
- nil = strchr(p, '.');
- if (nil != NULL)
- *nil = 0;
- val *= 256;
- val += atoi(p);
- if (nil != NULL)
- p = nil + 1;
- }
- return val;
-}
#ifndef _BBS_UTIL_C_ /* getdata_buf */
time4_t
@@ -502,35 +240,6 @@ gettime(int line, time4_t dt, const char*head)
}
#endif
-char *
-Cdate(const time4_t *clock)
-{
- time_t temp = (time_t)*clock;
- struct tm *mytm = localtime(&temp);
-
- strftime(cdate_buffer, sizeof(cdate_buffer), "%m/%d/%Y %T %a", mytm);
- return cdate_buffer;
-}
-
-char *
-Cdatelite(const time4_t *clock)
-{
- time_t temp = (time_t)*clock;
- struct tm *mytm = localtime(&temp);
-
- strftime(cdate_buffer, sizeof(cdate_buffer), "%m/%d/%Y %T", mytm);
- return cdate_buffer;
-}
-
-char *
-Cdatedate(const time4_t * clock)
-{
- time_t temp = (time_t)*clock;
- struct tm *mytm = localtime(&temp);
-
- strftime(cdate_buffer, sizeof(cdate_buffer), "%m/%d/%Y", mytm);
- return cdate_buffer;
-}
#ifndef _BBS_UTIL_C_
/* 這一區都是有關於畫面處理的, 故 _BBS_UTIL_C_ 不須要 */
@@ -858,36 +567,7 @@ log_user(const char *fmt, ...)
va_end(ap);
sethomefile(filename, cuser.userid, "USERLOG");
- return log_file(filename, LOG_CREAT | LOG_VF,
- "%s: %s %s", cuser.userid, msg, Cdate(&now));
-}
-
-int
-log_file(const char *fn, int flag, const char *fmt,...)
-{
- int fd;
- char msg[256];
- const char *realmsg;
- if( !(flag & LOG_VF) ){
- realmsg = fmt;
- }
- else{
- va_list ap;
- va_start(ap, fmt);
- vsnprintf(msg , 128, fmt, ap);
- va_end(ap);
- realmsg = msg;
- }
-
- if( (fd = open(fn, O_APPEND | O_WRONLY | ((flag & LOG_CREAT)? O_CREAT : 0),
- ((flag & LOG_CREAT) ? 0664 : 0))) < 0 )
- return -1;
- if( write(fd, realmsg, strlen(realmsg)) < 0 ){
- close(fd);
- return -1;
- }
- close(fd);
- return 0;
+ return log_filef(filename, LOG_CREAT, "%s: %s %s", cuser.userid, msg, Cdate(&now));
}
void
@@ -954,11 +634,6 @@ void FREE(void *ptr)
}
#endif
-unsigned
-StringHash(const char *s)
-{
- return fnv1a_32_strcase(s, FNV1_32_INIT);
-}
unsigned
DBCS_StringHash(const char *s)
@@ -1007,120 +682,3 @@ uintbsearch(const unsigned int key, const unsigned int *base0, const int nmemb)
return (NULL);
}
-int qsort_intcompar(const void *a, const void *b)
-{
- return *(int *)a - *(int *)b;
-}
-
-#ifdef TIMET64
-char *
-ctime4(const time4_t *clock)
-{
- time_t temp = (time_t)*clock;
-
- return ctime(&temp);
-}
-
-struct tm *localtime4(const time4_t *t)
-{
- if( t == NULL )
- return localtime(NULL);
- else {
- time_t temp = (time_t)*t;
- return localtime(&temp);
- }
-}
-
-time4_t time4(time4_t *ptr)
-{
- if( ptr == NULL )
- return time(NULL);
- else
- return *ptr = (time4_t)time(NULL);
-}
-#endif
-
-#ifdef OUTTACACHE
-int tobind(const char * host, int port)
-{
- int sockfd, val = 1;
- struct sockaddr_in servaddr;
-
- if( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) {
- perror("socket()");
- exit(1);
- }
- setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR,
- (char *)&val, sizeof(val));
- bzero(&servaddr, sizeof(servaddr));
- servaddr.sin_family = AF_INET;
- if (host == NULL || host[0] == 0)
- servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
- else if (inet_aton(host, &servaddr.sin_addr) == 0) {
- perror("inet_aton()");
- exit(1);
- }
- servaddr.sin_port = htons(port);
- if( bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0 ) {
- perror("bind()");
- exit(1);
- }
- if( listen(sockfd, 5) < 0 ) {
- perror("listen()");
- exit(1);
- }
-
- return sockfd;
-}
-
-int toconnect(const char *host, int port)
-{
- int sock;
- struct sockaddr_in serv_name;
- if( (sock = socket(AF_INET, SOCK_STREAM, 0)) < 0 ){
- perror("socket");
- return -1;
- }
-
- serv_name.sin_family = AF_INET;
- serv_name.sin_addr.s_addr = inet_addr(host);
- serv_name.sin_port = htons(port);
- if( connect(sock, (struct sockaddr*)&serv_name, sizeof(serv_name)) < 0 ){
- close(sock);
- return -1;
- }
- return sock;
-}
-
-/**
- * same as read(2), but read until exactly size len
- */
-int toread(int fd, void *buf, int len)
-{
- int l;
- for( l = 0 ; len > 0 ; )
- if( (l = read(fd, buf, len)) <= 0 )
- return -1;
- else{
- buf += l;
- len -= l;
- }
- return l;
-}
-
-/**
- * same as write(2), but write until exactly size len
- */
-int towrite(int fd, const void *buf, int len)
-{
- int l;
- for( l = 0 ; len > 0 ; )
- if( (l = write(fd, buf, len)) <= 0 )
- return -1;
- else{
- buf += l;
- len -= l;
- }
- return l;
-}
-#endif