Skip to content
Snippets Groups Projects
Select Git revision
  • a8e38bdf161ecd67cecc30c255775ad261aaae9f
  • master default protected
  • hpke
  • ppc-chacha-4core
  • delete-internal-name-mangling
  • master-updates
  • ppc-gcm
  • ppc-chacha-2core
  • refactor-ecc-mod
  • ppc-chacha-core
  • use-mpn_cnd-functions
  • optimize-ecc-invert
  • default-m4-quote-char
  • power-asm-wip
  • test-fat
  • chacha-3core-neon
  • x86_64-salsa20-2core
  • salsa20-2core-neon
  • bcrypt
  • arm-salsa20-chacha-vsra
  • test-shlib-dir
  • nettle_3.6_release_20200429
  • nettle_3.6rc3
  • nettle_3.6rc2
  • nettle_3.6rc1
  • nettle_3.5.1_release_20190627
  • nettle_3.5_release_20190626
  • nettle_3.5rc1
  • nettle_3.4.1_release_20181204
  • nettle_3.4.1rc1
  • nettle_3.4_release_20171119
  • nettle_3.4rc2
  • nettle_3.4rc1
  • nettle_3.3_release_20161001
  • nettle_3.2_release_20160128
  • nettle_3.1.1_release_20150424
  • nettle_3.1_release_20150407
  • nettle_3.1rc3
  • nettle_3.1rc2
  • nettle_3.1rc1
  • nettle_3.0_release_20140607
41 results

arcfour-meta.c

Blame
  • Forked from Nettle / nettle
    Source project has a limited visibility.
    • Niels Möller's avatar
      e6782e05
      Moved all typedefs for function types to nettle-types.h. Use · e6782e05
      Niels Möller authored
      non-pointer types, so that the types can be used to declare functions.
      Updated all users.
      
      Rev: nettle/arcfour-meta.c:1.2
      Rev: nettle/cbc.h:1.2
      Rev: nettle/des-compat.c:1.2
      Rev: nettle/examples/nettle-benchmark.c:1.3
      Rev: nettle/examples/nettle-openssl.c:1.2
      Rev: nettle/examples/rsa-encrypt.c:1.2
      Rev: nettle/examples/rsa-keygen.c:1.2
      Rev: nettle/nettle-internal.c:1.2
      Rev: nettle/nettle-meta.h:1.2
      Rev: nettle/nettle-types.h:1.2
      Rev: nettle/testsuite/dsa-keygen-test.c:1.3
      Rev: nettle/testsuite/rsa-encrypt-test.c:1.3
      Rev: nettle/testsuite/rsa-keygen-test.c:1.3
      Rev: nettle/testsuite/testutils.c:1.3
      e6782e05
      History
      Moved all typedefs for function types to nettle-types.h. Use
      Niels Möller authored
      non-pointer types, so that the types can be used to declare functions.
      Updated all users.
      
      Rev: nettle/arcfour-meta.c:1.2
      Rev: nettle/cbc.h:1.2
      Rev: nettle/des-compat.c:1.2
      Rev: nettle/examples/nettle-benchmark.c:1.3
      Rev: nettle/examples/nettle-openssl.c:1.2
      Rev: nettle/examples/rsa-encrypt.c:1.2
      Rev: nettle/examples/rsa-keygen.c:1.2
      Rev: nettle/nettle-internal.c:1.2
      Rev: nettle/nettle-meta.h:1.2
      Rev: nettle/nettle-types.h:1.2
      Rev: nettle/testsuite/dsa-keygen-test.c:1.3
      Rev: nettle/testsuite/rsa-encrypt-test.c:1.3
      Rev: nettle/testsuite/rsa-keygen-test.c:1.3
      Rev: nettle/testsuite/testutils.c:1.3
    constants.c 5.78 KiB
    /*
    || This file is part of Pike. For copyright information see COPYRIGHT.
    || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
    || for more information.
    || $Id: constants.c,v 1.61 2008/06/18 21:23:12 grubba Exp $
    */
    
    #include "global.h"
    #include "constants.h"
    #include "pike_macros.h"
    #include "program.h"
    #include "pike_types.h"
    #include "stralloc.h"
    #include "pike_memory.h"
    #include "interpret.h"
    #include "mapping.h"
    #include "pike_error.h"
    #include "pike_security.h"
    #include "gc.h"
    
    #include "block_alloc.h"
    
    struct mapping *builtin_constants = 0;
    
    #ifdef PIKE_DEBUG
    struct callable *first_callable = NULL;
    #endif
    
    PMOD_EXPORT struct mapping *get_builtin_constants(void)
    {
      return builtin_constants;
    }
    
    void low_add_efun(struct pike_string *name, struct svalue *fun)
    {
      struct svalue s;
    
      s.type=T_STRING;
      s.subtype=0;
      s.u.string=name;
    
      if(fun)
      {
        mapping_insert(builtin_constants, &s, fun);
      }else{
        map_delete(builtin_constants, &s);
      }
    }
    
    void low_add_constant(const char *name, struct svalue *fun)
    {
      struct pike_string *p;
      p=make_shared_string(name);
      low_add_efun(p, fun);
      free_string(p);
    }
    
    void add_pike_string_constant(const char *name, const char *str, int len)
    {
      struct pike_string *key = make_shared_string(name);
      struct pike_string *val = make_shared_binary_string(str, len);
      mapping_string_insert_string(builtin_constants, key, val);
      free_string(val);
      free_string(key);
    }
    
    PMOD_EXPORT void add_global_program(const char *name, struct program *p)
    {
      struct svalue s;
      s.type=T_PROGRAM;
      s.subtype=0;
      s.u.program=p;
      low_add_constant(name, p?&s:NULL);
    }
    
    #undef INIT_BLOCK
    #define INIT_BLOCK(X) do {						\
        DO_IF_DEBUG (DOUBLELINK (first_callable, X));			\
      } while (0)
    
    #undef EXIT_BLOCK
    #define EXIT_BLOCK(X) do {		\
      DO_IF_DEBUG (DOUBLEUNLINK (first_callable, X)); \
      free_type(X->type);			\
      free_string(X->name);			\
      X->name=0;				\
      EXIT_PIKE_MEMOBJ(X);                  \
    }while(0)
    
    BLOCK_ALLOC_FILL_PAGES(callable,2)
    
    int global_callable_flags=0;
    
    /* Eats one ref to 'type' and 'name' */
    PMOD_EXPORT struct callable *low_make_callable(c_fun fun,
    					       struct pike_string *name,
    					       struct pike_type *type,
    					       int flags,
    					       optimize_fun optimize,
    					       docode_fun docode)
    {
      struct callable *f=alloc_callable();
      INIT_PIKE_MEMOBJ(f);
      f->function=fun;
      f->name=name;
      f->type=type;
      f->prog=Pike_compiler->new_program;
      f->flags=flags;
      f->docode=docode;
      f->optimize=optimize;
      f->internal_flags = global_callable_flags;
    #ifdef PIKE_DEBUG
      {
        struct pike_type *z = NULL;
        add_ref(type);
        type = check_splice_call(name, type, 1, mixed_type_string, NULL,
    			     CALL_INHIBIT_WARNINGS);
        if (type) {
          z = new_get_return_type(type, CALL_INHIBIT_WARNINGS);
          free_type(type);
        }
        f->may_return_void = (z == void_type_string);
        if(!z) Pike_fatal("Function has no valid return type.\n");
        free_type(z);
      }
      f->runs=0;
    #endif
      return f;
    }
    
    PMOD_EXPORT struct callable *make_callable(c_fun fun,
    			       const char *name,
    			       const char *type,
    			       int flags,
    			       optimize_fun optimize,
    			       docode_fun docode)
    {
      return low_make_callable(fun, make_shared_string(name), parse_type(type),
    			   flags, optimize, docode);
    }
    
    PMOD_EXPORT struct callable *add_efun2(const char *name,
    			    c_fun fun,
    			    const char *type,
    			    int flags,
    			    optimize_fun optimize,
    			    docode_fun docode)
    {
      struct svalue s;
      struct pike_string *n;
      struct callable *ret;
    
      n=make_shared_string(name);
      s.type=T_FUNCTION;
      s.subtype=FUNCTION_BUILTIN;
      ret=s.u.efun=make_callable(fun, name, type, flags, optimize, docode);
      low_add_efun(n, &s);
      free_svalue(&s);
      free_string(n);
      return ret;
    }
    
    PMOD_EXPORT struct callable *add_efun(const char *name, c_fun fun, const char *type, int flags)
    {
      return add_efun2(name,fun,type,flags,0,0);
    }
    
    PMOD_EXPORT struct callable *quick_add_efun(const char *name, ptrdiff_t name_length,
    					    c_fun fun,
    					    const char *type, ptrdiff_t type_length,
    					    int flags,
    					    optimize_fun optimize,
    					    docode_fun docode)
    {
      struct svalue s;
      struct pike_string *n;
      struct pike_type *t;
      struct callable *ret;
    
    #ifdef PIKE_DEBUG
      if(simple_mapping_string_lookup(builtin_constants, name))
        Pike_fatal("%s added as efun more than once.\n", name);
    #endif
    
      n = make_shared_binary_string(name, name_length);
      t = make_pike_type(type);
    #ifdef DEBUG
      check_type_string(t);
    #endif
      s.type=T_FUNCTION;
      s.subtype=FUNCTION_BUILTIN;
      add_ref(n);
      ret=s.u.efun=low_make_callable(fun, n, t, flags, optimize, docode);
      mapping_string_insert(builtin_constants, n, &s);
      free_svalue(&s);
      free_string(n);
      return ret;
    }
    
    PMOD_EXPORT void visit_callable (struct callable *c, int action)
    {
      switch (action) {
    #ifdef PIKE_DEBUG
        default:
          Pike_fatal ("Unknown visit action %d.\n", action);
        case VISIT_NORMAL:
        case VISIT_COMPLEX_ONLY:
          break;
    #endif
        case VISIT_COUNT_BYTES:
          mc_counted_bytes += sizeof (struct callable);
          break;
      }
    
      if (!(action & VISIT_COMPLEX_ONLY)) {
        visit_type_ref (c->type, REF_TYPE_NORMAL);
        visit_string_ref (c->name, REF_TYPE_NORMAL);
      }
    
      /* Looks like the c->prog isn't refcounted..? */
      /* visit_program_ref (c->prog, REF_TYPE_NORMAL); */
    }
    
    #ifdef PIKE_DEBUG
    void present_constant_profiling(void)
    {
      struct callable_block *b;
      size_t e;
      for(b=callable_blocks;b;b=b->next)
      {
        for(e=0;e<NELEM(b->x);e++)
        {
          if(b->x[e].name)
          {
    	fprintf(stderr,"%010ld @E@: %s\n",b->x[e].runs, b->x[e].name->str);
          }
        }
      }
    }
    #endif
    
    void init_builtin_constants(void)
    {
      builtin_constants = allocate_mapping(300);
    }
    
    void exit_builtin_constants(void)
    {
    #ifdef DO_PIKE_CLEANUP
      if(builtin_constants)
      {
        free_mapping(builtin_constants);
        builtin_constants=0;
      }
    #endif
    }