|
|
1.1 ! root 1: /* semfile.c */ ! 2: ! 3: /* $Id: semfile.c,v 1.6 2004/12/24 07:50:10 rswindell Exp $ */ ! 4: ! 5: /**************************************************************************** ! 6: * @format.tab-size 4 (Plain Text/Source Code File Header) * ! 7: * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * ! 8: * * ! 9: * Copyright 2004 Rob Swindell - http://www.synchro.net/copyright.html * ! 10: * * ! 11: * This program is free software; you can redistribute it and/or * ! 12: * modify it under the terms of the GNU General Public License * ! 13: * as published by the Free Software Foundation; either version 2 * ! 14: * of the License, or (at your option) any later version. * ! 15: * See the GNU General Public License for more details: gpl.txt or * ! 16: * http://www.fsf.org/copyleft/gpl.html * ! 17: * * ! 18: * Anonymous FTP access to the most recent released source is available at * ! 19: * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net * ! 20: * * ! 21: * Anonymous CVS access to the development source and modification history * ! 22: * is available at cvs.synchro.net:/cvsroot/sbbs, example: * ! 23: * cvs -d :pserver:[email protected]:/cvsroot/sbbs login * ! 24: * (just hit return, no password is necessary) * ! 25: * cvs -d :pserver:[email protected]:/cvsroot/sbbs checkout src * ! 26: * * ! 27: * For Synchronet coding style and modification guidelines, see * ! 28: * http://www.synchro.net/source.html * ! 29: * * ! 30: * You are encouraged to submit any modifications (preferably in Unix diff * ! 31: * format) via e-mail to [email protected] * ! 32: * * ! 33: * Note: If this box doesn't appear square, then you need to fix your tabs. * ! 34: ****************************************************************************/ ! 35: ! 36: #include "sbbs.h" ! 37: ! 38: /****************************************************************************/ ! 39: /* This function compares a single semaphore file's */ ! 40: /* date/time stamp (if the file exists) against the passed time stamp (t) */ ! 41: /* updating the time stamp to the latest dated semaphore file and returning */ ! 42: /* TRUE if any where newer than the initial value. */ ! 43: /****************************************************************************/ ! 44: BOOL DLLCALL semfile_check(time_t* t, const char* fname) ! 45: { ! 46: time_t ft; ! 47: ! 48: if(*t==0) /* uninitialized */ ! 49: *t=time(NULL); ! 50: ! 51: if((ft=fdate(fname))==-1 || ft<=*t) ! 52: return(FALSE); ! 53: ! 54: *t=ft; ! 55: return(TRUE); ! 56: } ! 57: ! 58: /****************************************************************************/ ! 59: /* This function goes through a list of semaphore files, comparing the file */ ! 60: /* date/time stamp (if the file exists) against the passed time stamp (t) */ ! 61: /* updating the time stamp to the latest dated semaphore file and returning */ ! 62: /* a pointer to the filename if any where newer than the initial timestamp. */ ! 63: /****************************************************************************/ ! 64: char* DLLCALL semfile_list_check(time_t* t, link_list_t* filelist) ! 65: { ! 66: char* signaled=NULL; ! 67: list_node_t* node; ! 68: ! 69: for(node=listFirstNode(filelist);node!=NULL;node=listNextNode(node)) ! 70: if(semfile_check(t, node->data)) ! 71: signaled = node->data; ! 72: ! 73: return(signaled); ! 74: } ! 75: ! 76: void DLLCALL semfile_list_init(link_list_t* filelist, const char* parent, ! 77: const char* action, const char* service) ! 78: { ! 79: char path[MAX_PATH+1]; ! 80: char hostname[128]; ! 81: char* p; ! 82: ! 83: listInit(filelist,0); ! 84: SAFEPRINTF2(path,"%s%s",parent,action); ! 85: listPushNodeString(filelist,path); ! 86: SAFEPRINTF3(path,"%s%s.%s",parent,action,service); ! 87: listPushNodeString(filelist,path); ! 88: if(gethostname(hostname,sizeof(hostname))==0) { ! 89: SAFEPRINTF3(path,"%s%s.%s",parent,action,hostname); ! 90: listPushNodeString(filelist,path); ! 91: SAFEPRINTF4(path,"%s%s.%s.%s",parent,action,hostname,service); ! 92: listPushNodeString(filelist,path); ! 93: if((p=strchr(hostname,'.'))!=NULL) { ! 94: *p=0; ! 95: SAFEPRINTF3(path,"%s%s.%s",parent,action,hostname); ! 96: listPushNodeString(filelist,path); ! 97: SAFEPRINTF4(path,"%s%s.%s.%s",parent,action,hostname,service); ! 98: listPushNodeString(filelist,path); ! 99: } ! 100: } ! 101: } ! 102: ! 103: void DLLCALL semfile_list_add(link_list_t* filelist, const char* path) ! 104: { ! 105: listPushNodeString(filelist, path); ! 106: } ! 107: ! 108: void DLLCALL semfile_list_free(link_list_t* filelist) ! 109: { ! 110: listFree(filelist); ! 111: } ! 112: ! 113: BOOL DLLCALL semfile_signal(const char* fname, const char* text) ! 114: { ! 115: int file; ! 116: char hostname[128]; ! 117: ! 118: if((file=nopen(fname,O_CREAT|O_WRONLY))<0) ! 119: return(FALSE); ! 120: if(text==NULL && gethostname(hostname,sizeof(hostname))==0) ! 121: text=hostname; ! 122: if(text!=NULL) ! 123: write(file,text,strlen(text)); ! 124: close(file); ! 125: return(TRUE); ! 126: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.