From 518aab3d024c0032e19c76ee66baea78a7986242 Mon Sep 17 00:00:00 2001 From: "David F. Skoll" Date: Mon, 28 Jan 2008 11:28:17 -0500 Subject: [PATCH] Don't trash argv[] so reread works properly. --- src/globals.h | 6 +++--- src/init.c | 30 ++++++++++++++++++------------ src/main.c | 4 ++-- src/protos.h | 2 +- src/queue.c | 2 +- 5 files changed, 25 insertions(+), 19 deletions(-) diff --git a/src/globals.h b/src/globals.h index 7141487c..81ab22cc 100644 --- a/src/globals.h +++ b/src/globals.h @@ -37,7 +37,7 @@ EXTERN int CurMon; EXTERN int CurYear; EXTERN int LineNo; EXTERN int FreshLine; -EXTERN INIT( char *MsgCommand, NULL); +EXTERN INIT( char const *MsgCommand, NULL); EXTERN INIT( int ShowAllErrors, 0); EXTERN INIT( int DebugFlag, 0); EXTERN INIT( int DoCalendar, 0); @@ -61,7 +61,7 @@ EXTERN INIT( int SortByPrio, 0); EXTERN INIT( int DefaultPrio, NO_PRIORITY); EXTERN INIT( long SysTime, -1L); -EXTERN char *InitialFile; +EXTERN char const *InitialFile; EXTERN int FileAccessDate; EXTERN INIT( int DontFork, 0); @@ -86,7 +86,7 @@ EXTERN INIT( int ShouldCache, 0); EXTERN char *CurLine; EXTERN INIT( int NumTriggered, 0); EXTERN int ArgC; -EXTERN char **ArgV; +EXTERN char const **ArgV; EXTERN INIT( int CalLines, CAL_LINES); EXTERN INIT( int CalPad, 1); diff --git a/src/init.c b/src/init.c index fab4af41..9848d72d 100644 --- a/src/init.c +++ b/src/init.c @@ -79,8 +79,8 @@ while (isdigit(*(s))) { \ s++; \ } -static void ChgUser(char *u); -static void InitializeVar(char *str); +static void ChgUser(char const *u); +static void InitializeVar(char const *str); static char *BadDate = "Illegal date on command line\n"; @@ -94,7 +94,7 @@ static DynamicBuffer default_filename_buf; /* default filename. Use $DOTREMINDERS or $HOME/.reminders */ /* */ /***************************************************************/ -static char *DefaultFilename(void) +static char const *DefaultFilename(void) { char *s; @@ -122,14 +122,14 @@ static char *DefaultFilename(void) /* Initialize the system - called only once at beginning! */ /* */ /***************************************************************/ -void InitRemind(int argc, char *argv[]) +void InitRemind(int argc, char const *argv[]) { - char *arg; + char const *arg; int i; int y, m, d, rep; Token tok; int InvokedAsRem = 0; - char *s; + char const *s; /* Initialize global dynamic buffers */ DBufInit(&Banner); @@ -550,7 +550,7 @@ void Usage(void) /* USER environment variables. */ /* */ /***************************************************************/ -static void ChgUser(char *user) +static void ChgUser(char const *user) { uid_t myuid; @@ -616,23 +616,29 @@ static void ChgUser(char *user) /* Initialize and preserve a variable */ /* */ /***************************************************************/ -static void InitializeVar(char *str) +static void InitializeVar(char const *str) { - char const *varname; char const *expr; + char varname[VAR_NAME_LEN+1]; + Value val; int r; /* Scan for an '=' sign */ - varname = str; - while (*str && *str != '=') str++; + r = 0; + while (*str && *str != '=') { + if (r < VAR_NAME_LEN) { + varname[r++] = *str; + } + str++; + } + varname[r] = 0; if (!*str) { fprintf(ErrFp, ErrMsg[M_I_OPTION], ErrMsg[E_MISS_EQ]); return; } - *str = 0; if (!*varname) { fprintf(ErrFp, ErrMsg[M_I_OPTION], ErrMsg[E_MISS_VAR]); return; diff --git a/src/main.c b/src/main.c index 195ea470..56b4f4f5 100644 --- a/src/main.c +++ b/src/main.c @@ -62,9 +62,9 @@ int main(int argc, char *argv[]) /* Set up global vars */ ArgC = argc; - ArgV = argv; + ArgV = (char const **) argv; - InitRemind(argc, argv); + InitRemind(argc, (char const **) argv); if (DoCalendar || (DoSimpleCalendar && (!NextMode || PsCal))) { ProduceCalendar(); return 0; diff --git a/src/protos.h b/src/protos.h index 920e85b6..d2cc8839 100644 --- a/src/protos.h +++ b/src/protos.h @@ -44,7 +44,7 @@ int GetAccessDate (char const *file); int SetAccessDate (char const *fname, int jul); int TopLevel (void); int CallFunc (Operator *f, int nargs); -void InitRemind (int argc, char *argv[]); +void InitRemind (int argc, char const *argv[]); void Usage (void); int Julian (int year, int month, int day); void FromJulian (int jul, int *y, int *m, int *d); diff --git a/src/queue.c b/src/queue.c index 72537220..f6e68fbc 100644 --- a/src/queue.c +++ b/src/queue.c @@ -517,6 +517,6 @@ static void DaemonWait(unsigned int sleeptime) /***************************************************************/ static void reread(void) { - execvp(ArgV[0], ArgV); + execvp(ArgV[0], (char **) ArgV); }