laszlo.nu

Posts tagged os

Simple linked list (C) for OSP lab

A simple linked list (FIFO-queue) for future generations ;) Get the source.

/*
  Description: Very simple single linked list. Intended for use in the OSP lab
  at Chalmers. In the OS course at Chalmers, you are allowed and even
  encouraged to use an existing linked list instead of implementing your own -
  just remember to add a reference (or else it's cheating!).

  Author: André Laszlo <andre@laszlo.nu>
 */

#include <stdlib.h>
#include <stdio.h>

typedef struct node_s {
  void *data;
  struct node_s *next;
} NODE;

typedef struct list_s {
  NODE *first;
  NODE *last;
  int length;
} LIST;

/* Create a new list */
LIST* new_list()
{
  LIST *l;
  if (!(l=malloc(sizeof(LIST))))
    return NULL;

  l->length = 0;
  l->first = NULL;
  l->last = NULL;
  return l;
}

/* Create a new node that can be inserted into the list */
NODE* new_node(void *data)
{
  NODE *n;
  if (!(n=malloc(sizeof(NODE))))
    return NULL;
  n->next = NULL;
  n->data = data;
  return n;
}

/* Insert element at the end of the list */
void append(LIST *l, void *data)
{
  NODE *n = new_node(data);
  if (l->length == 0) {
    l->first = n;
    l->last = n;
  } else {
    l->last->next = n;
    l->last = n;
  }

  l->length++;
}

/* remove from head of list and return data */
void* pop(LIST *l)
{
  if (l->length == 0) {
    return NULL;
  } else if (l->length == 1) {
    void *data = l->first->data;
    free(l->first);
    l->first = NULL;
    l->length = 0;
    return data;
  } else {
    void *data = l->first->data;
    NODE *tmp = l->first->next;
    free(l->first);
    l->first = tmp;
    l->length--;
    return data;
  }

}

/* Return the position of an element in the list, or -1 if it does not exist */
int find(LIST *l, void* data)
{
  int i = 0;
  NODE *current = l->first;
  while (current != NULL) {
    if (current->data == data)
      return i;
    current = current->next;
    i++;
  }
  return -1;
}

/* Clean up list. TODO: Test this (since it's not used in lab) */
void destroy_list(LIST *l)
{
  NODE *current = l->first;
  NODE *next;
  while (current != NULL) {
    next = current->next;
    free(current->data);
    free(current);
    current = next;
  }
  free(l);
}

/* Return pointer to an integer with value n */
int* intpointer(int n)
{
  int* num = malloc(sizeof(int));
  *num = n;
  return num;
}

/* Test and demo subroutine */
int main()
{
  LIST *l = new_list();
  
  /* Should be zero */
  printf("Length: %d\n", l->length);

  /* Add some stuff to the list */
  int i;
  int *n;
  int *thing;
  for (i = 0; i < 10; i++) {
    n = intpointer(i);
    if (i == 4)
      thing = n; /* Keep this for searching, later */
    append(l, n);
  }

  /* Test find() */
  printf("Pos %d: %d\n", *(int*)thing, find(l, thing));
  int *other_thing = intpointer(12);
  printf("Pos %d: %d\n", *other_thing, find(l, other_thing));

  /* Test iteration */
  NODE* iter = l->first;
  printf("List: ");
  while(iter != NULL) {
    printf("%d ", *(int*)iter->data);
    /* Note: if reappending while iterating we might end up with an infinite
       loop. Try keeping a reference to the first reappended item if you want
       to break, or create a copy of the list */
    iter = iter->next; 
  }
  printf("\n");
  printf("Length: %d\n", l->length);

  /* Test pop() */
  int *popped = (int*)pop(l);
  while (popped != NULL) {
    printf("Pop result: %d\n", *popped);
    printf("Length: %d\n", l->length);
    popped = (int*)pop(l);
  }

  printf("Length: %d\n", l->length);

  /* Free up some memory */
  destroy_list(l);
  return 0;
}

OS-idioti

Reuters rapporterar att IOC (Internationella Olympiska Kommitén) har kommit överens med de kinesiska OS-arrangörerna om att låta dem blockera vissa hemsidor, trots att de tidigare lovat att låta utländska media få full tillgång till internet.

Sidor som blockeras är sådana som är känsliga för Kinas styrande kommunister. Till exempel har Falun Gong-relaterade sidor spärrats. Arrangörerna säger att sidorna som spärrats inte är OS-relaterade och därför inte kommer att påverka rapporteringen av spelen.

Internet hade varit ett perfekt verktyg för utländska journalister att komma i kontakt med intressanta personer, personer som kanske hade haft ett och annat att säga om hur det är att leva i Kina, så det där med att rapporteringen inte kommer att påverkas är bara skitsnack.

Det var såklart ett misstag redan från början att ge OS till en stor fet diktatur som inte bryr sig ett dugg om yttrandefrihet eller andra mänskliga rättigheter. Jag mår illa över att svenska folket kommer att sitta bänkade om drygt en vecka för att glo på meningslösheter som till exempel Klüfts nya karriär som går ut på att hoppa långt. Visst, hon är jävligt duktig på det, men vad spelar det för roll när hela spelen bara är propaganda för en regim som förtrycker sitt folk? Åt helvete med IOC, Kina och Carolina Klüft.

Bojkotta OS i Peking

Bojkotta OS i Peking

Jag ser på nyheterna hur OS-facklan har kommit tillbaka till Kina. Att den olympiska elden förs från Olympia till OS-stadion medelst stafett är en tradition som mysfarbrorn dr. J. Goebbels satte igång när de olympiska spelen hölls i Berlin 1936. Facklan släcktes den gången av demonstranter i Prag. Nästa gång facklan släcktes var i Köln 1992 av studenter som ogillade facklans nazistkopplingar.

I år är facklan återigen en del av en diktaturs propagandamaskineri. Facklan får lov att skyddas av tusentals poliser - 3000 bara i Paris. Man kan undra varför franska myndigheter gör en så stor grej av att skydda facklan och de kinesiska arrangörernas image när det uppenbarligen finns ett så starkt motstånd mot spelen. Nedanför Eiffeltornet tilläts till exempel bara kinesiska flaggor medan folk med tibetanska flaggor avvisades. Till slut fick man ändå lov att släcka facklan och transportera den med buss. Tredje gången gillt.

Mycket ståhej för en brinnande pinne kan man tycka, men OS i Peking 2008 är inte bara en idrottstävling utan också en chans till bra reklam för Kina, som absolut inte förtjänar det. 2006 stod Kina till exempel för mer än hälften av alla dödsstraff i världen, utan att ens ha gett de dödsdömda någon ordentlig rättegång. Ofta är bekännelserna framtvingade med hjälp av tortyr. En annan form av bestraffning i Kina är “omskolningslägren”, arbetsläger i stil med nazisternas koncentrationsläger (innan de blev de rena dödslägren man oftast förknippar dem med). Man kan bli skickad på omskolning av lokal polis i upp till fyra år, utan vare sig rättegång eller advokat. Omskolningslägren är praktiska när man vill få bort tiggare, horor och olagliga gatuförsäljare från gatorna. Dessutom sätter man folk som försvarar mänskliga rättigheter i husarrest, blockerar utländsla webbsidor, fängslar bloggare etc.

Man kan ju förstå att politikerna inte bojkottar OS, de vill ju inte försämra sin relation till Kina. Företagen kan man också förstå, OS är ju världens PR-möjlighet! Idrottsmännen måste man också ha förståelse för såklart, de vill ju inte riskera att bli av med sina sponsorer (se ovan) och det är ju verkligen ett dåligt karriärdrag att inte delta i OS.

Nej, fy fan säger jag bara. Stäng av teven i sommar så fort du ser en muskulös person i trikåer. Köp inga OS-hamburgare, OS-chips eller OS-whatever. Åk för gudarnas helighets skull inte till Kina och vifta med en liten blågul flagga. Förmodligen gör det ingen skillnad, men att bara låtsas som ingenting är bara äckligt.

Läs mer: