/* * Setup the environment with special MONIT_xxx variables. The program * executed may use such variable for various purposes. */ static void set_monit_environment(Service_T S, command_t C, Event_T E, const char *date) { setenv("MONIT_DATE", date, 1); setenv("MONIT_SERVICE", S->name, 1); setenv("MONIT_HOST", Run.system->name, 1); setenv("MONIT_EVENT", E ? Event_get_description(E) : C == S->start ? "Started" : C == S->stop ? "Stopped" : "No Event", 1); setenv("MONIT_DESCRIPTION", E ? Event_get_message(E) : C == S->start ? "Started" : C == S->stop ? "Stopped" : "No Event", 1); if (S->type == TYPE_PROCESS) { putenv(Str_cat("MONIT_PROCESS_PID=%d", Util_isProcessRunning(S, FALSE))); putenv(Str_cat("MONIT_PROCESS_MEMORY=%ld", S->inf->priv.process.mem_kbyte)); putenv(Str_cat("MONIT_PROCESS_CHILDREN=%d", S->inf->priv.process.children)); putenv(Str_cat("MONIT_PROCESS_CPU_PERCENT=%d", S->inf->priv.process.cpu_percent)); } }
int main(int argc, char *argv[]) { int i; Table_T identifiers = Table_new(5000, (int (*)(const void *, const void *))strcmp, strhash); Fmt_register('S', Str_fmt); first = Str_catv("abcdefghijklmnopqrstuvwxyz", 1, 0, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 1, 0, "_", 1, 0, NULL); rest = Str_cat(first, 1, 0, "0123456789", 1, 0); for (i = 1; i < argc; i++) { FILE *fp = fopen(argv[i], "r"); if (fp == NULL) fprintf(stderr, "%s: can't open '%s' (%s)\n", argv[0], argv[i], strerror(errno)); else { kref(argv[i], fp, identifiers); fclose(fp); } } if (argc == 1) kref(NULL, stdin, identifiers); { int i; void **array = Table_toArray(identifiers, NULL); qsort(array, Table_length(identifiers), 2*sizeof (*array), compare); for (i = 0; array[i]; i += 2) { Fmt_print("%S", array[i], 1, 0); print(array[i+1]); FREE(array[i]); } FREE(array); Table_free(&identifiers); } return EXIT_SUCCESS; }
/* Env variables are stored in the environment list as "name=value" strings */ void Command_setEnv(Command_T C, const char *name, const char *value) { assert(C); assert(name); removeEnv(C, name); List_append(C->env, Str_cat("%s=%s", name, value ? value : "")); FREE(C->_env); // Recreate Command environment on exec }
/* * Setup the environment with special MONIT_xxx variables. The program * executed may use such variable for various purposes. */ static void set_monit_environment(Service_T S, command_t C, Event_T E, const char *date) { setenv("MONIT_DATE", date, 1); setenv("MONIT_SERVICE", S->name, 1); setenv("MONIT_HOST", Run.system->name, 1); setenv("MONIT_EVENT", E ? Event_get_description(E) : C == S->start ? "Started" : C == S->stop ? "Stopped" : "No Event", 1); setenv("MONIT_DESCRIPTION", E ? E->message : C == S->start ? "Started" : C == S->stop ? "Stopped" : "No Event", 1); switch (S->type) { case Service_Process: putenv(Str_cat("MONIT_PROCESS_PID=%d", S->inf->priv.process.pid)); putenv(Str_cat("MONIT_PROCESS_MEMORY=%llu", (unsigned long long)((double)S->inf->priv.process.mem / 1024.))); putenv(Str_cat("MONIT_PROCESS_CHILDREN=%d", S->inf->priv.process.children)); putenv(Str_cat("MONIT_PROCESS_CPU_PERCENT=%.1f", S->inf->priv.process.cpu_percent)); break; case Service_Program: putenv(Str_cat("MONIT_PROGRAM_STATUS=%d", S->program->exitStatus)); break; default: break; } }
void Create_exp_str(struct unexp_tnode *Pntr, char **Str_ptr, int *Maxsize_str_ptr) { char Temp_str[10]; if (Pntr != NULL) { if ((Pntr->op != SMALL_LETTER) && (Pntr->op != SCALAR)) { if (Pntr->op == JUXT_PROD) { sprintf(Temp_str,"("); Str_cat(Str_ptr,Temp_str,Maxsize_str_ptr); } Create_exp_str(Pntr->operand1,Str_ptr,Maxsize_str_ptr); if (Pntr->op == ADDITION) { if (!Found_minus(Pntr->operand2)) { sprintf(Temp_str,"+"); Str_cat(Str_ptr,Temp_str,Maxsize_str_ptr); } } else if (Pntr->op == SUBTRACTION) { sprintf(Temp_str,"-"); Str_cat(Str_ptr,Temp_str,Maxsize_str_ptr); } Create_exp_str(Pntr->operand2,Str_ptr,Maxsize_str_ptr); if (Pntr->op == JUXT_PROD) { sprintf(Temp_str,")"); Str_cat(Str_ptr,Temp_str,Maxsize_str_ptr); } } else if (Pntr->op == SMALL_LETTER) { sprintf(Temp_str,"%c",Pntr->s_letter); Str_cat(Str_ptr,Temp_str,Maxsize_str_ptr); } else if (Pntr->op == SCALAR) { if (Pntr->scalar_num == -1) { sprintf(Temp_str,"-"); Str_cat(Str_ptr,Temp_str,Maxsize_str_ptr); } else if (Pntr->scalar_num != 1) { sprintf(Temp_str,"%d",Pntr->scalar_num); Str_cat(Str_ptr,Temp_str,Maxsize_str_ptr); } } } }
PreparedStatement_T PostgresqlConnection_prepareStatement(T C, const char *sql, va_list ap) { char *name; int paramCount = 0; va_list ap_copy; assert(C); assert(sql); PQclear(C->res); va_copy(ap_copy, ap); StringBuffer_vset(C->sb, sql, ap_copy); va_end(ap_copy); paramCount = StringBuffer_prepare4postgres(C->sb); uint32_t t = ++statementid; // increment is atomic name = Str_cat("%d", t); C->res = PQprepare(C->db, name, StringBuffer_toString(C->sb), 0, NULL); C->lastError = C->res ? PQresultStatus(C->res) : PGRES_FATAL_ERROR; if (C->lastError == PGRES_EMPTY_QUERY || C->lastError == PGRES_COMMAND_OK || C->lastError == PGRES_TUPLES_OK) return PreparedStatement_new(PostgresqlPreparedStatement_new(C->db, C->maxRows, name, paramCount), (Pop_T)&postgresqlpops, paramCount); return NULL; }
const char *URL_toString(T U) { assert(U); if (! U->toString) { uchar_t port[11] = {0}; if (U->port >= 0) snprintf(port, 10, ":%d", U->port); U->toString = Str_cat("%s://%s%s%s%s%s%s%s%s%s", U->protocol, U->user ? U->user : "", U->password ? ":" : "", U->password ? U->password : "", U->user ? "@" : "", U->host ? U->host : "", port, U->path ? U->path : "", U->query ? "?" : "", U->query ? U->query : ""); } return U->toString; }
int main(void) { Bootstrap(); // Need to initialize library printf("============> Start Str Tests\n\n"); printf("=> Test1: copy\n"); { char s3[STRLEN]; printf("\tResult: %s\n", Str_copy(s3, "The abc house", 7)); assert(Str_isEqual(s3, "The abc")); printf("\tTesting for NULL argument\n"); assert(!Str_copy(NULL, NULL, 7)); } printf("=> Test1: OK\n\n"); printf("=> Test2: dup\n"); { char *s4 = Str_dup("abc123"); printf("\tResult: %s\n", s4); assert(Str_isEqual(s4, "abc123")); printf("\tTesting for NULL argument\n"); assert(!Str_dup(NULL)); FREE(s4); } printf("=> Test2: OK\n\n"); printf("=> Test3: ndup\n"); { char *s5 = Str_ndup("abc123", 3); printf("\tResult: %s\n", s5); assert(Str_isEqual(s5, "abc")); printf("\tTesting for NULL argument\n"); assert(!Str_ndup(NULL, 3)); FREE(s5); } printf("=> Test3: OK\n\n"); printf("=> Test4: Str_cat & Str_vcat\n"); { char *s6; s6 = Str_cat("%s://%s%s?%s", "https", "foo.bar", "/uri", "abc=123"); printf("\tResult: %s\n", s6); assert(Str_isEqual(s6, "https://foo.bar/uri?abc=123")); FREE(s6); printf("\tTesting for NULL arguments\n"); s6 = Str_cat(NULL); assert(s6==NULL); FREE(s6); } printf("=> Test4: OK\n\n"); printf("=> Test5: chomp\n"); { char s3[] = "abc\r\n123"; printf("\tResult: %s\n", Str_chomp(s3)); assert(Str_isEqual(s3, "abc")); printf("\tTesting for NULL argument\n"); assert(!Str_chomp(NULL)); } printf("=> Test5: OK\n\n"); printf("=> Test6: trim\n"); { char e[] = " "; char o[] = " a "; char s[] = " abcdef"; char s4[] = " \t abc \r\n\t "; assert(Str_isEqual(Str_ltrim(s), "abcdef")); printf("\tResult: %s\n", Str_trim(s4)); assert(Str_isEqual(s4, "abc")); printf("\tTesting for NULL argument\n"); assert(!Str_trim(NULL)); assert(Str_isEqual(Str_ltrim(e), "")); memcpy(e, " ", sizeof(" ") - 1); assert(Str_isEqual(Str_rtrim(e), "")); memcpy(e, " ", sizeof(" ") - 1); assert(Str_isEqual(Str_trim(e), "")); assert(Str_isEqual(Str_ltrim(o), "a ")); memcpy(o, " a ", sizeof(" a ") - 1); assert(Str_isEqual(Str_rtrim(o), " a")); memcpy(o, " a ", sizeof(" a ") - 1); assert(Str_isEqual(Str_trim(o), "a")); assert(Str_isEqual(Str_trim(o), "a")); } printf("=> Test6: OK\n\n"); printf("=> Test7: trim quotes\n"); { char s5[] = "\"'abc'\""; char s5a[] = "\"'abc"; char s5b[] = "abc'\""; char s5c[] = "'\""; char s5d[] = " \t abc def '\" "; printf("\tResult: %s\n", Str_unquote(s5)); assert(Str_isEqual(s5, "abc")); printf("\tResult: %s\n", Str_unquote(s5a)); assert(Str_isEqual(s5, "abc")); printf("\tResult: %s\n", Str_unquote(s5b)); assert(Str_isEqual(s5, "abc")); printf("\tResult: %s\n", Str_unquote(s5b)); assert(Str_isEqual(s5, "abc")); printf("\tTesting for NULL argument\n"); assert(!Str_unquote(NULL)); printf("\tTesting for quotes-only argument\n"); assert(Str_isEqual("", Str_unquote(s5c))); printf("\tTesting for quotes and white-space removal\n"); assert(Str_isEqual("abc def", Str_unquote(s5d))); } printf("=> Test7: OK\n\n"); printf("=> Test8: toLowerCase\n"); { char s6[] = "AbC"; printf("\tResult: %s\n", Str_toLower(s6)); assert(Str_isEqual(s6, "abc")); printf("\tTesting for NULL argument\n"); assert(!Str_toLower(NULL)); } printf("=> Test8: OK\n\n"); printf("=> Test9: toUpperCase\n"); { char s7[] = "aBc"; printf("\tResult: %s\n", Str_toUpper(s7)); assert(Str_isEqual(s7, "ABC")); printf("\tTesting for NULL argument\n"); assert(!Str_toUpper(NULL)); } printf("=> Test9: OK\n\n"); printf("=> Test10: parseInt, parseLLong, parseDouble\n"); { char i[STRLEN] = " -2812 bla"; char ll[STRLEN] = " 2147483642 blabla"; char d[STRLEN] = " 2.718281828 this is e"; char de[STRLEN] = "1.495E+08 kilometer = An Astronomical Unit"; char ie[STRLEN] = " 9999999999999999999999999999999999999999"; printf("\tResult:\n"); printf("\tParsed int = %d\n", Str_parseInt(i)); assert(Str_parseInt(i)==-2812); printf("\tParsed long long = %lld\n", Str_parseLLong(ll)); assert(Str_parseLLong(ll)==2147483642); printf("\tParsed double = %.9f\n", Str_parseDouble(d)); assert(Str_parseDouble(d)==2.718281828); printf("\tParsed double exp = %.3e\n", Str_parseDouble(de)); assert(Str_parseDouble(de)==1.495e+08); TRY Str_parseInt(ie); assert(false); CATCH(NumberFormatException) printf("=> Test11: OK\n\n"); END_TRY; } printf("=> Test10: OK\n\n"); printf("=> Test11: replace\n"); { char s9[] = "abccba"; printf("\tResult: %s\n", Str_replaceChar(s9, 'b', 'X')); assert(Str_isEqual(s9, "aXccXa")); printf("\tTesting for NULL argument\n"); assert(!Str_replaceChar(NULL, 'b', 'X')); } printf("=> Test11: OK\n\n"); printf("=> Test12: startsWith\n"); { char *a = "mysql://*****:*****@ ]+@([-a-zA-Z0-9]+\\.)+[a-zA-Z]{2,}$"; char *valid_phone1 = "+4797141255"; char *valid_phone2 = "(47)-97-14-12-55"; char *invalid_phone1 = "141255"; char *invalid_phone2 = "(47)971412551234567890123456789012345678901234567890"; char *invalid_phone3 = ""; char *invalid_phone4 = "abc123"; char *valid_email1 = "*****@*****.**"; char *valid_email2 = "*****@*****.**"; char *invalid_email1 = "hauktildeslash.com"; char *invalid_email2 = ""; char *invalid_email3 = "hauk@tildeslashcom"; char *invalid_email4 = "hauk@æøåtildeslash.com"; // phone printf("\tResult: match(%s, %s)\n", phone_pattern, valid_phone1); assert(Str_match(phone_pattern, valid_phone1)); printf("\tResult: match(%s, %s)\n", phone_pattern, valid_phone2); assert(Str_match(phone_pattern, valid_phone2)); printf("\tResult: match(%s, %s)\n", phone_pattern, invalid_phone1); assert(! Str_match(phone_pattern, invalid_phone1)); printf("\tResult: match(%s, %s)\n", phone_pattern, invalid_phone2); assert(! Str_match(phone_pattern, invalid_phone2)); printf("\tResult: match(%s, %s)\n", phone_pattern, invalid_phone3); assert(! Str_match(phone_pattern, invalid_phone3)); printf("\tResult: match(%s, %s)\n", phone_pattern, invalid_phone4); assert(! Str_match(phone_pattern, invalid_phone4)); // email printf("\tResult: match(%s, %s)\n", email_pattern, valid_email1); assert(Str_match(email_pattern, valid_email1)); printf("\tResult: match(%s, %s)\n", email_pattern, valid_email2); assert(Str_match(email_pattern, valid_email2)); printf("\tResult: match(%s, %s)\n", email_pattern, invalid_email1); assert(! Str_match(email_pattern, invalid_email1)); printf("\tResult: match(%s, %s)\n", email_pattern, invalid_email2); assert(! Str_match(email_pattern, invalid_email2)); printf("\tResult: match(%s, %s)\n", email_pattern, invalid_email3); assert(! Str_match(email_pattern, invalid_email3)); printf("\tResult: match(%s, %s)\n", email_pattern, invalid_email4); assert(! Str_match(email_pattern, invalid_email4)); } printf("=> Test17: OK\n\n"); printf("=> Test18: lim\n"); { char *zero = ""; char *two = "12"; char *ten = "1234567890"; assert(! Str_lim(zero, 0)); assert(!Str_lim(zero, 1)); assert(Str_lim(two, 0)); assert(Str_lim(two, 1)); assert(!Str_lim(two, 2)); assert(Str_lim(ten, 0)); assert(Str_lim(ten, 5)); assert(Str_lim(ten, 9)); assert(!Str_lim(ten, 10)); assert(! Str_lim(ten, 100)); } printf("=> Test18: OK\n\n"); printf("=> Test19: substring\n"); { assert(Str_sub("foo bar baz", "bar")); assert(! Str_sub("foo bar baz", "barx")); assert(Str_isEqual(Str_sub("foo bar baz", "baz"), "baz")); assert(Str_sub("foo bar baz", "foo bar baz")); assert(Str_sub("a", "a")); assert(! Str_sub("a", "b")); assert(! Str_sub("", "")); assert(! Str_sub("foo", "")); assert(! Str_sub("abc", "abcdef")); assert(! Str_sub("foo", "foo bar")); assert(Str_isEqual(Str_sub("foo foo bar", "foo bar"), "foo bar")); assert(Str_sub("foo foo bar foo bar baz fuu", "foo bar baz")); assert(Str_isEqual(Str_sub("abcd abcc", "abcc"), "abcc")); } printf("=> Test19: OK\n\n"); printf("=> Test20: Str_join\n"); { char *p = NULL; char dest[10+1] = "xxxxxxxxx"; char a[] = "abc"; char *b = "def"; char *c = "xxx123"; assert(Str_isEqual(Str_join(dest, 10, a, b, "ghi"), "abcdefghi")); assert(Str_isEqual(Str_join(dest, 10, p), "")); assert(Str_isEqual(Str_join(dest, 10), "")); assert(Str_isEqual(Str_join(dest, 10, "012", "3456789", "0123456789"), "0123456789")); assert(Str_isEqual(Str_join(dest, 4, "a", "b", "cd", "ghi", "jklmnopq"), "abcd")); assert(Str_isEqual(Str_join(dest, 10, a, c + 3), "abc123")); Str_join(dest, 0); assert(dest[0]==0); } printf("=> Test20: OK\n\n"); printf("=> Test21: Str_has\n"); { char *foo = "'bar' (baz)"; assert(Str_has("(')", foo)); assert(! Str_has(",;", foo)); } printf("=> Test21: OK\n\n"); printf("=> Test22: Str_curtail\n"); { char s[] = "<text>Hello World</text>"; assert(Str_isByteEqual(Str_curtail(s, "</text>"), "<text>Hello World")); assert(Str_isByteEqual(Str_curtail(s, ">"), "<text")); assert(Str_isByteEqual(Str_curtail(s, "@"), "<text")); } printf("=> Test22: OK\n\n"); printf("=> Test23: Str_ton\n"); { char str[43]; long l1 = 42, l2 = 0, l3 = -42, l4 = LONG_MAX, l5 = LONG_MIN; assert(Str_isByteEqual("42", Str_ton(42, (char[43]){0}))); assert(Str_isByteEqual("42", Str_ton(l1, str))); assert(Str_isByteEqual("0", Str_ton(l2, str))); assert(Str_isByteEqual("-42", Str_ton(l3, str))); assert(l4 == Str_parseLLong(Str_ton(l4, str))); assert(l5 == Str_parseLLong(Str_ton(l5, str))); }
/* Env variables are stored in the environment list as "name=value" strings */ void Command_setEnv(Command_T C, const char *name, const char *value) { assert(C); assert(name); removeEnv(C, name); List_append(C->env, Str_cat("%s=%s", name, value ? value : "")); }