Description: TODO: Put a short summary on the line above and replace this paragraph with a longer explanation of this change. Complete the meta-information with other relevant fields (see below for details). To make it easier, the information below has been extracted from the changelog. Adjust it or drop it. . gcl (2.6.12-90) unstable; urgency=medium . * Version_2_6_13pre87 * latest standards Author: Camm Maguire --- The information above should follow the Patch Tagging Guidelines, please checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here are templates for supplementary fields that you might want to add: Origin: , Bug: Bug-Debian: https://bugs.debian.org/ Bug-Ubuntu: https://launchpad.net/bugs/ Forwarded: Reviewed-By: Last-Update: 2019-12-18 --- gcl-2.6.12.orig/h/pool.h +++ gcl-2.6.12/h/pool.h @@ -20,9 +20,8 @@ static struct pool { ufixnum s; } *Pool; -static struct flock pl,*plp=&pl; - -static const char *gcl_pool="/tmp/gcl_pool"; +static struct flock f,pl,*plp=&pl; +static char gcl_pool[PATH_MAX]; static int set_lock(void) { @@ -66,8 +65,8 @@ open_pool(void) { if (pool==-1) { - struct flock f; - + massert(!home_namestring1("~",1,FN1,sizeof(FN1))); + massert(snprintf(gcl_pool,sizeof(gcl_pool),"%sgcl_pool",FN1)>=0); massert((pool=open(gcl_pool,O_CREAT|O_RDWR,0644))!=-1); massert(!ftruncate(pool,sizeof(struct pool))); massert((Pool=mmap(NULL,sizeof(struct pool),PROT_READ|PROT_WRITE,MAP_SHARED,pool,0))!=(void *)-1); @@ -111,6 +110,9 @@ close_pool(void) { #ifndef NO_FILE_LOCKING if (pool!=-1) { + f.l_type=F_WRLCK; + if (!fcntl(pool,F_SETLK,&f)) + massert(!unlink(gcl_pool)); register_pool(-1); massert(!close(pool)); massert(!munmap(Pool,sizeof(struct pool))); --- gcl-2.6.12.orig/h/protoize.h +++ gcl-2.6.12/h/protoize.h @@ -1971,3 +1971,6 @@ travel_find_sharing(object,object); object new_cfdata(void); + +int +home_namestring1(const char *,int,char *,int); --- gcl-2.6.12.orig/o/unixfsys.c +++ gcl-2.6.12/o/unixfsys.c @@ -95,16 +95,20 @@ DEFUN_NEW("UID-TO-NAME",object,fSuid_to_ #endif } -DEFUN_NEW("HOME-NAMESTRING",object,fShome_namestring,SI,1,1,NONE,OO,OO,OO,OO,(object nm),"") { +int +home_namestring1(const char *n,int s,char *o,int so) { -#ifndef __MINGW32__ + #ifndef __MINGW32__ struct passwd *pwent,pw; long r; + massert(s>0); + massert(*n=='~'); + massert((r=sysconf(_SC_GETPW_R_SIZE_MAX))>=0); massert(r<=sizeof(GETPW_BUF));/*FIXME maybe once at image startup*/ - if (nm->st.st_fillp==1) + if (s==1) if ((pw.pw_dir=getenv("HOME"))) pwent=&pw; @@ -113,26 +117,44 @@ DEFUN_NEW("HOME-NAMESTRING",object,fShom else { - massert(nm->st.st_fillpst.st_self+1,nm->st.st_fillp-1); - FN2[nm->st.st_fillp-1]=0; + massert(spw_dir))+2pw_dir,r); - FN3[r]='/'; - FN3[r+1]=0; - RETURN1(make_simple_string(FN3)); + massert((r=strlen(pwent->pw_dir))+2pw_dir,r); + o[r]='/'; + o[r+1]=0; + return 0; #else - massert(snprintf(FN1,sizeof(FN1)-1,"%s%s",getenv("SystemDrive"),getenv("HOMEPATH"))>=0); - RETURN1(make_simple_string(FN1)); + massert(snprintf(o,so-1,"%s%s",getenv("SystemDrive"),getenv("HOMEPATH"))>=0); + return 0; #endif } + +DEFUN_NEW("HOME-NAMESTRING",object,fShome_namestring,SI,1,1,NONE,OO,OO,OO,OO,(object nm),"") { + + check_type_string(&nm); + + massert(!home_namestring1(nm->st.st_self,nm->st.st_fillp,FN1,sizeof(FN1))); + RETURN1(make_simple_string(FN1)); + +} +#ifdef STATIC_FUNCTION_POINTERS +object +fShome_namestring(object x) { + return FFN(fShome_namestring)(x); +} +#endif + + + #define FILE_EXISTS_P(a_,b_) !stat(a_,&b_) && S_ISREG(b_.st_mode) #define DIR_EXISTS_P(a_,b_) !stat(a_,&b_) && S_ISDIR(b_.st_mode)