Description: <short summary of the patch>
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-78) unstable; urgency=medium
.
* rebuild against latest compilers and tools
* Version_2_6_13pre69
Author: Camm Maguire <camm@debian.org>
---
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: <vendor|upstream|other>, <url of original patch>
Bug: <url in upstream bugtracker>
Bug-Debian: https://bugs.debian.org/<bugnumber>
Bug-Ubuntu: https://launchpad.net/bugs/<bugnumber>
Forwarded: <no|not-needed|url proving that it has been forwarded>
Reviewed-By: <name and email of someone who approved the patch>
Last-Update: 2018-10-29
--- gcl-2.6.12.orig/h/linux.h
+++ gcl-2.6.12/h/linux.h
@@ -132,17 +132,10 @@ do { int c = 0; \
#include <limits.h>
#include <sys/stat.h>
-#define GET_FULL_PATH_SELF(a_) do { \
- static char q[PATH_MAX]; \
- const char *s="/proc/self/exe"; \
- struct stat ss; \
- if (stat(s,&ss)) \
- (a_)=argv[0]; \
- else { \
- if (!realpath(s,q)) \
- error("realpath error"); \
- (a_)=q; \
- } \
+#define GET_FULL_PATH_SELF(a_) do { \
+ static char q[PATH_MAX]; \
+ massert(which("/proc/self/exe",q) || which(argv[0],q)); \
+ (a_)=q; \
} while(0)
--- gcl-2.6.12.orig/o/main.c
+++ gcl-2.6.12/o/main.c
@@ -460,18 +460,49 @@ DEFUN_NEW("EQUAL-TAIL-RECURSION-CHECK",o
RETURN1((object)(w-u));
}
+static int
+mbin(const char *s,char *o) {
+
+ struct stat ss;
+
+ if (!stat(s,&ss) && (ss.st_mode&S_IFMT)==S_IFREG && !access(s,R_OK|X_OK)) {
+ massert(realpath(s,o));
+ return 1;
+ }
+
+ return 0;
+
+}
+
+static int
+which(const char *n,char *o) {
+
+ char *s;
+
+ if (strchr(n,'/'))
+ return mbin(n,o);
+
+ massert(snprintf(FN1,sizeof(FN1),"%s",getenv("PATH"))>1);
+ for (s=NULL;(s=strtok(s ? NULL : FN1,":"));) {
+
+ massert(snprintf(FN2,sizeof(FN2),"%s/%s",s,n));
+ if (mbin(FN2,o))
+ return 1;
+
+ }
+
+ return 0;
+
+}
+
+
int
main(int argc, char **argv, char **envp) {
-#ifdef GET_FULL_PATH_SELF
GET_FULL_PATH_SELF(kcl_self);
-#else
- kcl_self = argv[0];
-#endif
-
*argv=kcl_self;
-
+
#ifdef CAN_UNRANDOMIZE_SBRK
#include <stdio.h>
#include <stdlib.h>